zoukankan      html  css  js  c++  java
  • 【一通百通】C/C++的std标准总结

      C/C++发展很多版本标准,sunsky(本人)早就想理理std标准了,让大家有个清晰的了解。

    适用C(或C源代码,如C ++,Objective-C和Objective-C ++)的标准:

    -ansi
    在C模式下,这相当于 -std = c90的。在C ++模式下,相当于-std = c ++ 98的。

    这将关闭不兼容的与ISO C90(编译时C代码),或标准的C ++(编译C ++时代码)GCC的某些特征,如asm与typeof关键字,以及预定义的宏如unix和vax标识系统的类型你正在使用。它也可以使用不希望的和很少使用的ISO三联图特征。对于C编译器,它禁用C ++风格的识别//'评论以及inline关键字。

    该替代关键字__asm__,__extension__, __inline__和__typeof__继续,尽管工作 -ㄧ的。当然,您不希望在ISO C程序中使用它们,但将它们放在可能包含在编译完成的头文件中是有用的-ㄧ。备用的预定义宏,如__unix__和__vax__也可用,有或没有-ㄧ的。

    的 -ㄧ选项不会导致非ISO程序被无偿地拒绝。为了那个原因,-Wpedantic 除了需要 -ㄧ。请参阅警告选项。

    宏__STRICT_ANSI__是预定义的-ㄧ 选项被使用。某些头文件可能会注意到此宏,并且不要声明某些功能或定义ISO标准不要求的某些宏; 这是为了避免干扰可能使用这些名称的其他任何程序。

    通常内置但不具有ISO C(如alloca和ffs)定义的语义的函数不是内置函数-ㄧ用来。请参阅GCC提供的其他内置功能,了解影响功能的详细信息。

    -std=
    确定语言标准。有关这些标准版本的详细信息,请参阅GCC支持的语言标准。当选择编译C或C ++时,此选项目前才被支持。

    编译器可以接受几个基本标准,如“c90' 要么 'c ++ 98'和这些标准的GNU标准,如“gnu90' 要么 'gnu ++ 98'。当指定基准标准时,编译器接受遵循该标准的所有程序,以及使用不违反基准标准的GNU扩展。例如, -std = c90关闭那些不符合ISO C90 GCC的某些功能,比如asm和typeof 关键字,而不是其他GNU扩展没有在ISO C90意义,如省略的中期?: 表现。另一方面,当指定了标准的GNU标准时,编译器支持的所有功能都被启用,即使这些功能改变了基本标准的含义。因此,一些严格的程序可能会被拒绝。特定标准被使用-Wpedantic识别哪个特性是标准版本的GNU扩展。例如 -std = gnu90 -Wpedantic 警告C ++风格'//“评论,而 -std = gnu99 -Wpedantic 才不是。

    必须提供此选项的值; 可能的值是

    “c90“
    “c89“
    “iso9899:1990“
    支持所有ISO C90程序(与ISO C90冲突的某些GNU扩展禁用)。与...一样-ㄧ 为C代码。

    “iso9899:199409“
    修改1中修改的ISO C90。

    “c99“
    “c9x“
    “iso9899:1999“
    “iso9899:199x“
    ISO C99。此标准基本上完全支持,模数错误和浮点问题(主要是但不完全与附件F和G中的可选C99功能完全相关)。见 http://gcc.gnu.org/c99status.html以获取更多信息。名字 'c9x'和'iso9899:199x“已被弃用。

    “c11“
    “c1x“
    “iso9899:2011“
    ISO C11,ISO C标准的2011修订版。该标准基本上完全支持,模数错误,浮点问题(主要但不完全与附件F和G中的可选C11特性相关)和可选附件K(界限检查接口)和L(可分析性)。名字 'c1x“已被弃用

    “gnu90“
    “gnu89“
    GNU标准ISO C90(包括一些C99功能)。

    “gnu99“
    “gnu9x“
    GNU标准ISO C99。名字 'gnu9x“已被弃用

    “gnu11“
    “gnu1x“
    GNU标准ISO C11。这是C代码的默认值。名字 'gnu1x“已被弃用

    “c ++ 98“
    “c ++ 03“
    1998年ISO C ++标准加上2003年的技术更正和一些其他缺陷报告。与...一样-ㄧ 用于C ++代码。

    “gnu ++ 98“
    “gnu ++ 03“
    GNU标准 -std = c ++ 98的。

    “c ++ 11“
    “c ++ 0x“
    2011年ISO C ++标准加上修改。名字 'c ++ 0x“已被弃用

    “gnu ++ 11“
    “gnu ++ 0x“
    GNU标准 -std = c ++ 11的。名字 'gnu ++ 0x“已被弃用

    “c ++ 14“
    “c ++ 1y“
    2014年ISO C ++标准加上修改。名字 'c ++ 1y“已被弃用

    “gnu ++ 14“
    “gnu ++ 1y“
    GNU标准 -std = c ++ 14的。这是C ++代码的默认值。名字 'gnu ++ 1y“已被弃用

    “c ++ 1z“
    ISO C ++标准的下一次修订,暂定于2017年。支持是高度实验性的,在将来的版本中几乎肯定会以不兼容的方式发生变化。

    “gnu ++ 1z“
    GNU标准 -std = c ++ 1z的。支持是高度实验性的,在将来的版本中几乎肯定会以不兼容的方式发生变化。

      

    总结:

      目前来看,c/c++的89/11是最流行的,其实就是实用,有产生力。至于之前的古董,只能说除了兼容性好,几乎没其他的优势了。

      另外,请大家请注意下,C几乎上不再更新了,慢慢转向C++的统一(这话是国外c/cpp论坛的),大家有空多关注C++14/17的发展吧,新特性还是能振奋人心的。

      

  • 相关阅读:
    在IDEA通过Maven构建Scala项目
    6.Pair RDD操作
    5.RDD的Action操作和持久化persist()
    29.Spark SQL发展史
    AirFlow初始化的时候遇到 Global variable explicit_defaults_for_timestamp needs to be on (1) for mysql
    4.RDD操作之Transform
    3.RDD详解和创建RDD方式
    28.Spark中action的介绍
    2.Spark 2.x 集群部署和测试
    Repeater分页
  • 原文地址:https://www.cnblogs.com/sunsky303/p/6650082.html
Copyright © 2011-2022 走看看