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的发展吧,新特性还是能振奋人心的。

  

【一通百通】C/C++的std标准总结的更多相关文章

  1. C++11新特性,利用std::chrono精简传统获取系统时间的方法

    一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...

  2. std::max、std::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:“::”

    在VC++种同时包含头文件#include <windows.h>和#include <algorithm>后就会出现无法正常使用std标准库中的min和max模板函数,经过查 ...

  3. POCO库——Foundation组件之核心Core

    核心Core: Version.h:版本控制信息,宏POCO_VERSION,值格式采用0xAABBCCDD,分别代表主版本.次版本.补丁版本.预发布版本: Poco.h:简单地包含了头文件Found ...

  4. js for循环中i++ 和 ++i有什么区别?

    平时都是这样写的for循环, for(var i = 0; i < 20 ; i++){ .... } 但我看有的人这样写 for (var i = 0; i < 20 ; ++i) { ...

  5. 通过实战理解C语言精要——函数篇

      前言 本篇博客是对C语言函数部分的重点内容和细枝末节通过实战得到的经验的总结精炼,不涵盖C语言函数的全部内容,所有提炼内容均来自提炼与实战,阅读需要对函数部分有一定基础,可用于对C语言函数的理解提 ...

  6. jQuery multiselect的使用

    1,下载插件 https://github.com/ehynds/jquery-ui-multiselect-widget

  7. cocos2d-x 内存管理浅析

    Cocos2d-x用create创建对象, 这个方法已经被引擎封装成一个宏定义了:CREATE_FUNC, 下面是这个宏定义的实现: #define CREATE_FUNC(__TYPE__) \   ...

  8. STM32学习笔记(十) CAN通讯测试(环回模式)

    1.CAN通讯的理解 想学习CAN通讯,那么要对通讯协议有一定的认知.通讯协议是指通信双方对数据传送控制的一种约定.约定中包括对数据格式,同步方式,传输速度,传送步骤,检纠错方式以及控制字符定义等问题 ...

  9. [原] blade中C++ singleton的实现

    最近看了龚大大KalyGE中的singleton, 觉得非常不错(C++中线程安全并且高效的singleton). 可惜blade的代码都是C++03的, 没有使用C++11的任何特性. 笔者对于si ...

随机推荐

  1. 覆写hashCode equal方法

    1.为什么要重写hashCode方法? 当自己要新建一个class,并要把这个类放到HashMap的时候,需要覆写这两个办法.如果不覆写,放入两个新的对象,可能会是不相等的. 在java的集合中,判断 ...

  2. 【Javaweb】笔面试题 ---(1)

    Javaweb 面试题:理解才是最重要的,而不是原封不动的背下来 一.请简述doget和dopost它们的区别 1) get是从服务器上获取数据,post是向服务器传送数据. 2) 在客户端,Get方 ...

  3. 读书笔记 effective c++ Item 17 使用单独语句将new出来的对象放入智能指针

    1. 可能会出现资源泄漏的一种用法 假设我们有一个获取进程优先权的函数,还有一个在动态分类的Widget对象上根据进程优先权进行一些操作的函数: int priority(); void proces ...

  4. mac os x在PC上安装

    系统安装之前的准备工作及安装过程简介 前面我们已经提到,苹果电脑虽然已经采用了x86架构的Intel处理器,但其官方并不提供在非苹果电脑上安装Mac OS的支持.所以,要想在普通PC/笔记本电脑上安装 ...

  5. jQuery_第三章_工厂函数

  6. BZOJ 1004: [HNOI2008]Cards(群论)

    好吧我就是蒟蒻根本没听说过群论(虽说听叉姐说几万年都不会考) 我也讲不太来,直接戳VFK大神的blog啦 = = http://vfleaking.blog.163.com/blog/static/1 ...

  7. iOS应用 跳转到系统的设置界面

    现在很多APP都需要获取用户权限,例如,允许调用位置信息,读取短信,拨打电话,开启WIFI,掉头摄像头等,用户不允许APP获取这些权限的时候.最好的用户体验是,直接跳转到系统设置界面,让用户自己设置. ...

  8. 每天一个linux命令(42)--traceroute命令

    通过traceroute 我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不 ...

  9. 用PHP ping 一个 IP

    最近要做一个 测试IP列表 是否能连通的功能.大家都知道我们一般用 ping 命令就可以看到IP端口可不可以连通.那在程序里要怎么做呢? 我们在网上找到很多都是使用  exec("ping ...

  10. 棋盘覆盖(一) ACM

    棋盘覆盖 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求 ...