zoukankan      html  css  js  c++  java
  • 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
    ", a);
    
        // C99
        _Bool b = 1;
         if (b)
         {
             printf("b is true.
    ");
         }
         else{
             printf("b is false
    ");
         }
         
        return 0;
    }

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

  • 相关阅读:
    生成随机串码并保存到Excel中
    制作100份word表
    抓取网页图片-以本地IIS网页为实践对象
    使用xlsxwriter 创建图表chart
    照片查看器2.0
    编程注意事项-记踩过的坑
    STC12C5A60S2的定时器模式16位的时候没有自动重载功能
    Keil C51 一个警告 '=': pointer: different mspace
    RT-Thread 使用笔记二
    Keil-C51读取ROM数据
  • 原文地址:https://www.cnblogs.com/fortunely/p/9490979.html
Copyright © 2011-2022 走看看