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 ...
随机推荐
- Git储藏工作现场
假设你现在在dev分支工作,此时你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,你当前工作只进行到一半,还没法提交,预计完成还需1天时间 ...
- element-ui表头render-header 传自定义参数
最近用到 element 的表格的 render-header 这个属性查了文档 发现: 发现它会返回部分参数 但是因为考虑要工程化,需要自定义传入参数,后来找度娘 ,发现是可以自定义传参的 :re ...
- 数制的运用-CodeForces - 535B
题解: 因为每一位只可能是4或者7,可以类比二进制的思想. 基数为2,每一位的权值为2i-1:数字4表示的大小为1*2i-1:数字7表示的大小为2*2i-1. 将给定的n按照这种方法进行分解,求和.即 ...
- 浅析PHP页面局部刷新功能的实现小结(转)
转载地址 https://www.jb51.net/article/38901.htm 方法其实挺多的.以前比较常用的是iframe这样来做.现在多了个ajax,所以一般情况下都是用的ajax.第一种 ...
- ASA防火墙忘记密码之后的恢复步骤
ASA的密码恢复方法与路由器相似,修改配置寄存器的值,启动时绕过startup-config配置文件,重新配置密码. 密码恢复的步骤如下: (1)重新插拔电源线,重启ASA (2)按ESC键或Ctrl ...
- ES2.3.5版本的数据类型
1,最近使用了2.3.5版本的ES,发现在创建索引的时候出了以下错误. (1)例: POST 192.168.11.166:9200/article3/article/_mapping { " ...
- Java IO流详解(四)——字符流Reader和Writer
前面一章介绍了字节流的使用,提到了字节流在处理utf-8编码的中文可能会出现乱码的情况(其他编码的中文同样会出现乱码),所以Java针对这一情况提供了字符流. 但是字符流只能处理字符,不能用来处理 . ...
- 监控Tomcat状态!(重点)
方法一:开发JAVA监控页面 [root@localhost ~]# mkdir /usr/local/tomcat8/webapps/memtest/[root@localhost ~]# cd / ...
- 使用new时,会发生什么?
使用new来调用函数,或者说发生构造函数调用时,会自动执行下面的操作: 创建(或说构造)一个全新的对象. 这个新对象会被执行[[prototype]]连接. 这个新对象会绑定到函数调用的this. 如 ...
- 在一个不稳定的无效的ViewState净的应用问题。 Erratic Invalid Viewstate issue in a .NET application
这似乎是很多人都经历了同样的IE8的问题.似乎发生的是,不知何故,IE8(在IE8的渲染模式和IE7兼容模式)将失去4096个字节的HTML文档中该数据缺失导致此异常(通常你看到这一scriptres ...