C 如何判断编译器是否支持C90 C99?
参考:《C Primer Plus》,Stephen Prata著,姜佑译。
ANSI/ISO C标准
美国ANSI成立委员会X3J11,于89/90年,99年,11年,发布C标准:C89/C90,C99,C11。
| C标准 | 描述 |
| 经典C | 也称K&R C,87年K&R著作《C语言程序设计》,成为C指导标准 |
| C89/C90 |
89年ANSI C,90年ISO C,定义了C语言和C标准库。X3J11开发,同一套标准,发布名称/机构不同。 用意:作为实现,应该针对目标计算机定义适合特定操作,而不是强加一个抽象、统一的定义。 特点: 1.信任程序员; 2.不妨碍程序员做任何事; 3.语言简单精炼; 4.只提供一种方法执行一项操作; 5.不为程序可移植性牺牲效率。 |
| C99 |
C9X委员会修订,遵循C90原则。 新特性: 1.支持国际化编程; 2.调整现有实践致力于解决明显的缺陷; 3.为适应科学和工程项目中关键数值计算,提高C适应性; |
| C11 |
特点: 1.不强调信任程序员; 2.不要求服务小型机市场供应商支持目标环境用不到的特性; |
C语言标准众多,要如何判断编译器所支持的标准版本?
一个简单的方法是,依据不同版本标准所支持的数据类型关键字来判别,如下表所示:
| K&R给出的关键字(87 经典C) | C90添加关键字 | C99添加关键字 |
| int | signed | _Bool |
| long | void | _Complex |
| short | _Imaginary | |
| unsigned | ||
| char | ||
| float | ||
| double |
那么,可以在C程序中,定义相应类型,然后build是否支持来判断。
下面在Ubuntu OS下以为例,进行测试。
GCC版本=4.8.4

测试代码:
//C99.c
#include <stdio.h>
#include <stdint.h> int main(void)
{
// C90
signed int a = -;
printf("a=%d\n", a); // C99
_Bool b = ;
if (b)
{
printf("b is true.\n");
}
else{
printf("b is false\n");
} return ;
}
运行结果表明编译器支持C99:

C 如何判断编译器是否支持C90 C99?的更多相关文章
- 使用CMakeLists.txt 判断编译器是否支持C++11
#将下面的内容添加到CMakeLists.txt当中include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11&quo ...
- 使用xmake检测编译器特性支持
如果我们要写跨平台的c/c++代码,很多时候需要处理由于不同编译器对c/c++各个标准支持力度不同导致的兼容性问题,一般通常的解决办法是:自己在代码中通过宏去判断各个编译器的版本.内置宏.标准库宏._ ...
- C#判断PC是否支持触摸屏
C#判断PC是否支持触摸屏 添加引用PresentationFrameworkSystem.Windows.SystemParameters.IsTabletPC 使用win32api [csharp ...
- 判断浏览器是否支持某个css3属性的javascript方法
判断浏览器是否支持css3某个属性的方法: /** * 判断浏览器是否支持某一个CSS3属性 * @param {String} 属性名称 * @return {Boolean} true/false ...
- JS判断浏览器是否支持某一个CSS3属性
1.引子 css3的出现让浏览器的表现更加的丰富多彩,表现冲击最大的就是动画了,在日常书写动画的时候,很有必要去事先判断浏览器是否支持,尤其是在写CSS3动画库的时候.比如transition的ani ...
- 判断浏览器是否支持FileReader
1.js代码: //判断浏览器是否支持FileReader if (typeof FileReader == "undefined") { document.write(" ...
- document.documentElement.style判断浏览器是否支持Css3属性
1.document.documentElement.style 属性定义了当前浏览器支持的所有Css属性 包括带前缀的和不带前缀的 例如:animation,webkitAnimation,msAn ...
- 判断URL是否支持断点续传?
#python #xiaodeng #判断URL是否支持断点续传? import urllib2 req = urllib2.Request('http://ftp.ubuntu.com/') req ...
- 判断浏览器是否支持某一个CSS3属性
判断浏览器是否支持某一个CSS3属性 function supportCss3(style) { var prefix = ['webkit', 'Moz', 'ms', 'o'], i, humpS ...
随机推荐
- windows 10安装linux(ubuntu)子系统
windows10安装ubuntu子系统系统 之前一直在虚拟机中使用linux系统,但是不是很方便,后来发现windows下也有了linux系统.感觉还不错 1. 打开windows应用市场micro ...
- Smart License
思科启动了通过构建思科智能软件管理器门户来简化客户许可管理的计划. 它可以帮助客户了解他们购买的许可证以及他们使用的许可证. 其他各种思科产品已经启用Smart Enabled,随着此版本(我这里学习 ...
- contextField 键盘只允许输入数字和小数点,并且现在小数点后位数
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...
- selenium+python实现自动化登录
工作需要实现一个微博自动登录的操作,在网上差了一些资料,决定使用selenium+python实现 selenium 是一个web的自动化测试工具,主流一般配合java或者python使用,我这里使用 ...
- Strategic game POJ - 1463
题目链接 依旧是树形dp啦,一样的找根节点然后自下而上更新即可 设\(dp_{i,0}\)表示第i个不设,\(dp_{i,1}\)表示第i个设一个,容易得到其状态转移 \(dp_{i,0} = \su ...
- docker - 启动不了docker服务
原因 因为docker是CS架构,Server方要配置好源,客户端才能连接,服务才能开启 解决办法 1.切换到root用户,su root.. 2.sudo vim /etc/docker/daemo ...
- buu Crypto 刷题记录
1.MD5 直接解. 2.url编码 直接解. 3.一眼就解密 base64. 4.看我回旋踢 对文本内容全部CaesarDecode. 5.摩丝 直接MorseDecode. 6.Quoted-pr ...
- kongdashboard
apiVersion: v1kind: Servicemetadata: name: kong-dashboard namespace: kongspec: type: NodePort po ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 从已有的数组创建数组
import numpy as np x = [1,2,3] a = np.asarray(x) print (a) import numpy as np x = (1,2,3) a = np.asa ...
- java里自定义分页查询的尝试
public String list(){ try { LoginUser loginUser = getLoginUser();//获取当前登录用户 if(curpage<=0){ curpa ...