C99和C89

2023-11-05

这是c0conut同学的一份作业,也可以理解为总结,为了保留这份作业,写了博客。我尽量使自己写得简单好懂有趣。

C99与C89的亲子关系

就如DOM结构一般,C99与C89之间也充满温情。老父亲C89顾名思义出生于89年,也被称为ANSI,C99出生于1999年,在C89的基础上进行发展和拓展,充分继承和发扬了Dio家的特质

C99的优秀之处(?)拒绝吹捧,人人有责

1.主流编译器基本都支持C99

举个栗子,gcc基本3.0+都支持C99(现在使用的gcc是7.3.x版本)。但是呢,众所周知,MS爹爹和C99三官不和,所以vs对C99支持比较差,从2013版本开始部分支持,到2017版本也是部分支持。

2.C99中增加了公适用于指针的restrict类型修饰符

作为初始访问指针所指对象的惟一途径。这句话也就是说,restrict只能用于指针,它指针成为唯一初始的访问对象的方式,这可以使编译器自己作出优化。

3.对编译器限制支持了

比如源程序每行要求至少支持到 4095 字节,变量名与函数名的要求支持到 63 字节 (extern 要求支持到 31)。

4.局部变长数组

举例子:

	struct love
	{int  she=1;
	int he[0];}

这里he是一个长度为0的数组,他的地址跟在love之后,如果给love分配了太多空间,多出来的就是数组he的啦。
还可以写

struct  modian
{int kill=233;
char me[];}

5.支持单行注释

6.有了bool,true,false

7.for语句内可以进行变量声明

8.复合赋值中可以指定对象类型的数组、结构或联合表达式

9.这是一个比较的表

  • 限制             C89标准  C99标准
  • 数据块的嵌套层数       15     127
  • 条件语句的嵌套层数      8      63
  • 内部标识符中的有效字符个数  31     63
  • 外部标识符中的有效字符个数  6      31
  • 结构或联合中的成员个数    127    1023
  • 函数调用中的参数个数     31     127

10.指定的初始化

举例子

int a[10]=
{
[1]=1,
[2]=2;
};

再举个例子

struct date
{
int hour,min;
}date1={min=1};

11. printf()和scanf()函数系列的增强

C99中printf()和scanf()函数系列引进了处理long long int和unsigned long long int数据类型
的特性。long long int 类型的格式修饰符是ll。
C99还引进了hh修饰符。用于指定char型变元。ll和hh修饰符均可以用于n说明符。
格式修饰符a和A用在printf()函数中时,结果将会输出十六进制的浮点数。使用A格式修饰符时,x和p必须是大写。A和a格式修饰符也可以用在scanf()函数中,用于读取浮点数。调用printf()函数时,允许在%f说明符前加上l修饰符,即%lf,但不起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C99和C89 的相关文章

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框

随机推荐

  • php模式之装饰器模式1

    原文来自 大胖博客 装饰器模式 也成修饰器模式 目的是给现有的对象增加或修改成新逻辑 说人话就是不改变对象的情况下 给对象的某个操作增加前置操作或者后置操作 当然也有可能改变操作的逻辑 举个栗子 我们在操作数据库的时候会从数据库拉取数据 拉
  • 《shell脚本编写——常用例子》

    目录 1 书写脚本 批量添加用户 2 根据要求判断文件类型 3 根据要求搜集服务器系统信息 4 检测磁盘使用率 5 检测url是否正常 6 防止文件被误删除的脚本 7 shell入侵检测和邮件报警 1 MD5sum校验 2 web目录下文件
  • 信号量和互斥锁有什么区别

    这是概念上的区别 比如说 信号 那是多线程同步用的 一个线程完成了某一个动作就通过信号告诉别的线程 别的线程再进行某些动作 互斥锁 这是多线程互斥用的 比如说 一个线程占用了某一个资源 那么别的线程就无法访问 知道这个线程离开 其他的线程才
  • vue自定义指令 v-debounce 防抖

    vue自定义指令 防抖 使用场景 点击查询按钮 或者 点击提交保存按钮 的时候点击次数过多 会多次提交 为了避免这种情况发生 我们可以做个防抖 点击一次后 第二次需要间隔一定的时间才能再次点击 这时候我们能想到可以用vue 的自定义指令di
  • UE4(Unreal Engine4)虚幻引擎视口布局,并且自定义HDRI

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 操作步骤 1 准备工作 二 操作步骤 1 UE4中创建第三人称游戏 前言 在UE4中搭建电影级场景 先看下效果 一 操作步骤 1 准备工作 1 在UE4 Unreal Engine
  • nodejs全栈开发学习笔记

    为什么学nodejs 因为听说学会了nodejs可以做全栈开发 哈哈 我也是一个有野心的程序员 其实并没有 nodejs学了好几次 也放弃了好几次 主要原因就是感觉莫名其妙 自学 跟前端开发联系不上 光是环境搭建 Windows系统 就卡死
  • opencv中的transpose和flip

    cv flip 的第三个参数 大于0表示沿y轴翻转 等于0表示沿x轴翻转 小于0表示 x和y同时翻转
  • vc文件操作,内存映射

    vc文件操作 内存映射 各种关于文件的操作在程序设计中是十分常见 如果能对其各种操作都了如指掌 就可以根据实际情况找到最佳的解决方案 从而在较短的时间内编写出高效的代码 因而熟练的掌握文件操作是十分重要的 本文将对Visual C 中有关文
  • 浅谈Vue项目优化心得

    1 打包优化 提取组件的 CSS 到单独到文件 屏蔽 sourceMap 开启 gzip 压缩 公共库使用cdn外链 打包vender时不打包vue vuex vue router axios等 换用国内的 bootcdn unpkg 直接
  • 计算方法(三)矩阵分解1-正交分解(QR分解)

    为什么80 的码农都做不了架构师 gt gt gt 正交分解 矩阵的正交分解又称为QR分解 是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式 任意实数方阵A 都能被分解为 这里的Q为正交单位阵 即 R是一个上三角矩阵 这种分解被称为
  • 手写Mybatis:第20章-Mybatis 框架源码10种设计模式分析

    文章目录 一 类型 创建型模式 1 1 工厂模式 1 2 单例模式 1 3 建造者模式 二 类型 结构型模式 2 1 适配器模式 2 2 代理模式 2 3 组合模式 2 4 装饰器模式 三 类型 行为型模式 3 1 模板模式 3 2 策略模
  • Unity接入TopOn聚合广告平台SDK【聚合了穿山甲,优量汇(腾讯广告),快手,Mintegral,sigmob等各大广告平台SDK】

    TopOn聚合穿山甲 优量汇 快手 Mintegral各大广告SDK教程 接了好几家SDK 都有亿点点蛋疼 直到遇到了TopOn TopOn的文档和SDK相当齐全 包括Android IOS Unity Cocos2dx CocosCrea
  • 数据库动态加载省市区信息,实现三级联动

    本文转载自 http my oschina net zhengweishan blog 402483 摘要 动态的从数据库加载全国省市区 后台使用的是SpringMvc 前台使用的是bootstrap页面展示 demo源码下载地址 http
  • Qt安装包+安装配置说明 (强烈推荐,小白专用)

    链接 https pan baidu com s 1zrhLUP sjWgCQdrFacDQCQ 提取码 uie5内附赠详细安装说明 可以 信我获取
  • es7合并数组相关 报错Uncaught (in promise) TypeError: Invalid attempt to spread non-iterable instance...

    方法一 let o1 a 1 b 2 c 3 let o2 o1 d 4 o2 a 1 b 2 c 3 d 4 let arr1 0 1 2 let arr2 arr1 3 arr2 0 1 2 3 方法二 let o1 a 1 b 2 c
  • 科普:java与C++的区别

    Java与C 是两种广泛使用的编程语言 它们在某些方面存在不同之处 本文将详细介绍Java与C 的区别 一 C 与Java的历史 C 语言是由Bjarne Stroustrup在20世纪80年代初期开发的一种面向对象编程语言 它是C语言的扩
  • 服务器CPU占用率高,如何排查?

    1 定位进程 登录服务器 执行top命令 查看CPU占用情况 top 2 定位线程 如果进程23456占用率高 top Hp23456 进行定位线程 3 定位代码 通过top命令 我们目前已经定位到导致CPU使用率较高的具体线程 比如线程4
  • 电脑如何进入bios模式_电脑BIOS是什么?到底有什么用?如何进入电脑BIOS

    BIOS是英文 Basic Input Output System 的缩略语 直译过来后中文名称就是 基本输入输出系统 其实 它是一组固化到计算机内主板上一个ROM芯片上的程序 它保存着计算机最重要的基本输入输出的程序 系统设置信息 开机后
  • Python3 + Pymysql + mysql 连接方法

    准备材料 1 host地址 127 0 0 1 2 端口号 3306 3 用户名 root 4 密码 5 数据库名 information persons 6 python3 的pymysql库 正式开始 查询 1 首先导入pymysql包
  • C99和C89

    这是c0conut同学的一份作业 也可以理解为总结 为了保留这份作业 写了博客 我尽量使自己写得简单好懂有趣 C99与C89的亲子关系 就如DOM结构一般 C99与C89之间也充满温情 老父亲C89顾名思义出生于89年 也被称为ANSI C