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 ...
随机推荐
- C语言与汇编的嵌入式编程:求100以内素数
写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i+ ...
- 2 数据结构的性能分析 timeit
# python数据结构的性能分析 https://www.cnblogs.com/bobo-zhang/p/10521769.html from timeit import Timer #计算运行平 ...
- velocity的 ${} 、$!{}、 !${}
${abc} //-------过滤变量中的HTML标签 $!{abc} //-------原样输出表达式,"!"符号表示如果可以取到值则显示值,如果取不到值或值为null, ...
- 从 0 到 1:Apache APISIX 的 Apache 之路
2019 年 12 月 14 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 广州站活动,本次活动,邀请了来自Apache APISIX.又 ...
- PyQt5日历控件及相关操作
1.日历控件QCalendarWidget控件import sys,mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQ ...
- Spring Boot 使用 Dom4j XStream 操作 Xml
Xml 现在仍然占据着比较重要的地位,比如微信接口中使用了 Xml 进行消息的定义.本章重点讨论 Xml 的新建.编辑.查找.转化,可以这么理解,本章是使用了 dom4j.xstream 也是在开发者 ...
- idea中springboot静态资源及页面跳转问题
1,静态资源放在resources/static下,html页面放在resources/templates下 2,在html中引入静态资源时,不用带static(对于路径来说是透明的) 3, 配置ht ...
- js中数组的循环与遍历forEach,map
对于前端的循环遍历我们知道有 针对js数组的forEach().map().filter().reduce()方法 针对js对象的for/in语句(for/in也能遍历数组,但不推荐) 针对jq数组/ ...
- 吴裕雄 python 神经网络——TensorFlow训练神经网络:不使用滑动平均
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 ...
- docker环境下mysql数据库的备份
#! /bin/bash DATE=`date +%Y%m%d%H%M%S` BACK_DATA=erp-${DATE}.sql #导出表结构,不包括表数据 #docker exec -i xin-m ...