参考:《C Primer Plus》,Stephen Prata著,姜佑译。

ANSI/ISO C标准

美国ANSI成立委员会X3J11,于89/90年,99年,11年,发布C标准:C89/C90,C99,C11。

ANSI/ISO 各版本C标准
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语言标准众多,要如何判断编译器所支持的标准版本?

一个简单的方法是,依据不同版本标准所支持的数据类型关键字来判别,如下表所示:

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?的更多相关文章

  1. 使用CMakeLists.txt 判断编译器是否支持C++11

    #将下面的内容添加到CMakeLists.txt当中include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11&quo ...

  2. 使用xmake检测编译器特性支持

    如果我们要写跨平台的c/c++代码,很多时候需要处理由于不同编译器对c/c++各个标准支持力度不同导致的兼容性问题,一般通常的解决办法是:自己在代码中通过宏去判断各个编译器的版本.内置宏.标准库宏._ ...

  3. C#判断PC是否支持触摸屏

    C#判断PC是否支持触摸屏 添加引用PresentationFrameworkSystem.Windows.SystemParameters.IsTabletPC 使用win32api [csharp ...

  4. 判断浏览器是否支持某个css3属性的javascript方法

    判断浏览器是否支持css3某个属性的方法: /** * 判断浏览器是否支持某一个CSS3属性 * @param {String} 属性名称 * @return {Boolean} true/false ...

  5. JS判断浏览器是否支持某一个CSS3属性

    1.引子 css3的出现让浏览器的表现更加的丰富多彩,表现冲击最大的就是动画了,在日常书写动画的时候,很有必要去事先判断浏览器是否支持,尤其是在写CSS3动画库的时候.比如transition的ani ...

  6. 判断浏览器是否支持FileReader

    1.js代码: //判断浏览器是否支持FileReader if (typeof FileReader == "undefined") { document.write(" ...

  7. document.documentElement.style判断浏览器是否支持Css3属性

    1.document.documentElement.style 属性定义了当前浏览器支持的所有Css属性 包括带前缀的和不带前缀的 例如:animation,webkitAnimation,msAn ...

  8. 判断URL是否支持断点续传?

    #python #xiaodeng #判断URL是否支持断点续传? import urllib2 req = urllib2.Request('http://ftp.ubuntu.com/') req ...

  9. 判断浏览器是否支持某一个CSS3属性

    判断浏览器是否支持某一个CSS3属性 function supportCss3(style) { var prefix = ['webkit', 'Moz', 'ms', 'o'], i, humpS ...

随机推荐

  1. github提交代码

    下载git for windows,安装 第一步: 第二步: 第三步:不存在repository,点击 create a repository 第四步:切换至History菜单下,并点击publish ...

  2. Jmeter_正则表达式提取器_提取单组数据

    1.用处:提取登录信息/获取session或者token数值 2.举例:获取登录结果的获取:msg":"登录成功" 这个数据 3.HTTP->后置处理器->正 ...

  3. ubuntu 18.04中nginx不能访问软链接目录中的内容

    解决办法:以root权限运行nginx,即修改/etc/nginx/nginx.conf中的user www-data为root

  4. 传奇身上装备升级系列脚本,以及UPGRADEITEMEX 脚本的详细参数解释

    UPGRADEITEMEX 脚本的详细参数解释如下: UPGRADEITEMEX 物品位置(0-12) 属性位置(0-14) 成功机率(0-100) 点数机率(0-255) 是否破碎(0,1) 物品位 ...

  5. ASP.NET Core搭建多层网站架构【15-扩展之使用Obfuscar混淆加密保护代码】

    2020/02/03, ASP.NET Core 3.1, VS2019, Obfuscar 2.2.25 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[15-扩展之使 ...

  6. linu后台执行py文件和关闭的后台py文件

    后台执行py nohup python xxx.py 关闭后台执行py 查看进程pid ps -aux|grep main.py 根据pid关闭关闭进程 kill -9 (pid)

  7. C:clock() 计算代码执行时间

    clock():捕捉从程序开始运行到clock()被调用时所耗费的事件. 这个时间的单位是 clock tick,即时钟打点 常数 CLK_TCK:机器时钟每秒走的时钟打点数 要使用这个函数需要包含头 ...

  8. 如何查看Ubuntu系统版本

    在Ubuntu终端,常用以下几种方式查看系统版本: 一.uname -a 二.cat /etc/issue 三.cat /etc/lsb-release 四.lsb_release -a 五.cat ...

  9. mongodb副本集仲裁节点搭建

    服务器准备: 主节点192.168.100.106 从节点192.168.100.107 仲裁节点192.168.100.108 三台服务器: 关闭防火墙 service iptables stop ...

  10. C#多个泛型约束问题

    多个约束之间使用逗号隔开,但不重复T约束. 1. private void AddControl<T>(TabPage tabPage, T userControl) where T: U ...