C 如何判断编译器是否支持C90 C99?

参考:《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 = -10;
    printf("a=%d\n", a);

    // C99
    _Bool b = 1;
     if (b)
     {
         printf("b is true.\n");
     }
     else{
         printf("b is false\n");
     }

    return 0;
}

运行结果表明编译器支持C99:

原文地址:https://www.cnblogs.com/fortunely/p/9490979.html

时间: 2024-11-09 04:44:17

C 如何判断编译器是否支持C90 C99?的相关文章

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

如果我们要写跨平台的c/c++代码,很多时候需要处理由于不同编译器对c/c++各个标准支持力度不同导致的兼容性问题,一般通常的解决办法是:自己在代码中通过宏去判断各个编译器的版本.内置宏.标准库宏.__has_feature等来检测处理. 自己如果在代码中按上述的方式检测,会很繁琐,尤其是像c++这种存在大量语法特性,如果一一检测过来,工作量是非常大的. 通过构建工具预先检测编译特性 另外比较省事的方式,就是依赖构建工具提前做好检测,然后把检测结果作为宏添加到编译中去,这样代码只需要判断对应的特

.NET 中,编译器直接支持的数据类型称为基元类型(primitive type).基元类型和.NET框架类型(FCL)中的类型有直接的映射关系.

.NET 中,编译器直接支持的数据类型称为基元类型(primitive type).基元类型和.NET框架类型(FCL)中的类型有直接的映射关系. The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single. https://msdn.microsoft.com/zh-cn/library/s

HTML5:判断浏览器是否支持date类型

在某些情况下,我们需要判断当前浏览器是否支持date类型,如果支持的话,可以让用户用原生的datepicker来选取日期.如果不支持,则我们需要用自己实现的datepicker类库,来提供给用户. 在这里,我们使用Modernizr来实现这一功能,代码如下: 1 if (!Modernizr.inputtypes.date) { 2 $('input[type=date]').datepicker({ 3 }); 4 } HTML5:判断浏览器是否支持date类型,布布扣,bubuko.com

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

1.document.documentElement.style 属性定义了当前浏览器支持的所有Css属性 包括带前缀的和不带前缀的 例如:animation,webkitAnimation,msAnimation等 2.判断浏览器是否支持制定的css属性 function support(cssName) { var htmlStyle = document.documentElement.style; if (cssName in htmlStyle) return true; return

JS判断浏览器是否支持某一个CSS3属性的最佳实践

css3的出现让浏览器的表现更加的丰富多彩,表现冲击最大的就是动画了,在日常书写动画的时候,很有必要去事先判断浏览器是否支持,尤其是在写CSS3动画库的时候.比如transition的animation-play-state,就只有部分浏览器支持. 检测方法 下面的方法可以使用脚本判断浏览器是否支持某一个CSS3属性: /**2017-01-05 * 判断浏览器是否支持某一个CSS3属性 * @param {String} 属性名称 * @return {Boolean} true/false

判断浏览器是否支持CSS3 已经初步探索JS 惰性加载

分享一个判断浏览器是否支持的函数,然后有牵扯到了一个懒性加载的概念. var iscss3=(function(){ var _style=document.createElement("div").style; return 'transition' in _style||'mozTransition' in _style||'webkitTransition' in _style; })() 什么是惰性加载呢,像我们JS和CSS一样 很多浏览器属性和方法都不兼容,需要用到大量的分支

判断浏览器是否支持javascript脚本语言及处理方法

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

判断浏览器是否支持FileReader

1.js代码: //判断浏览器是否支持FileReader if (typeof FileReader == "undefined") { document.write("您的浏览器不支持FileReader"); } else { document.write("您的浏览器支持FileReader"); } /** * 测试结果说明:Google,FF,IE都支持FileReader * 但是IE9及以下浏览器不支持FileReader */

判断浏览器是否支持webp

判断浏览器是否支持webp格式 var isSupportWebp = !![].map && document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') == 0; 返回true或false: true为支持,false不支持 !![].map主要是判断是否是IE9+,以免toDataURL方法会挂掉.如果你直接对数组原型扩展了map方法,则需要使用!![].map以外的方法进行判