编程参考 - GNU编译使用的命令行选项: 选择语言标准的“-std=“

在编译C/C++代码时,可以使用要选择语言标准,比如要使用C++11,也就是2011年发布的ISO C++标准,来编译test.cpp文件:

$ g++ -o test test.cpp-std=c++11

这个选项用来确定语言标准。参见GCC支持的语言标准来了解这些标准版本的细节:Standards (Using the GNU Compiler Collection (GCC)).

这个选项目前只在编译C或C++时支持。

编译器可以接受几种基本标准,如'c90'或'c++98',以及这些标准的GNU定制版(dialects ),如'gnu90'或'gnu++98'。当指定了一个基本标准时,编译器会接受所有遵循该标准的程序,以及那些使用GNU扩展的、与该标准不矛盾的程序。例如,-std=c90会关闭GCC中某些与ISO C90不兼容的功能,如asm和typeof关键字,但不会关闭其他在ISO C90中没有意义的GNU扩展,如省略?:表达式的中间项。另一方面,当一个标准的GNU定制版被指定时,编译器所支持的所有特性都被启用,即使这些特性改变了基础标准的含义。因此,一些严格符合标准的程序可能会被拒绝。指定语言标准版本后,后面加上“ -Wpedantic” 选项来识别哪些特性是在该版本标准下的 GNU 扩展。例如,“-std=gnu90 -Wpedantic”会警告C++风格的'//'注释,而“-std=gnu99 -Wpedantic”则不会。

该选项需要提供一个值,可以使用的值如下:

'c90'

'c89'

'iso9899:1990'

支持所有的ISO C90程序(某些与ISO C90冲突的GNU扩展被禁用)。与C代码的-ansi相同。

'iso9899:199409'

在修正案1中修改的ISO C90。

'c99'

'c9x'

'iso9899:1999'

'ISO9899:199x'

ISO C99。这个标准基本上是所有编译器完全支持的,除了错误和浮点问题(主要但不完全与附件F和G的可选C99功能有关)。更多信息见Status of C99 features in GCC- GNU Project。”c9x“ 和 "iso9899:199x "这两个名称已被废弃。

'c11'

'c1x'

'iso9899:2011'

ISO C11,是ISO C标准的2011年修订版。这个标准基本上是所有编译器完全支持的,除了错误、浮点问题(主要但不完全与附件F和G的可选C11特性有关)和可选附件K(边界检查接口)和L(可分析性)。名称'c1x'已被废弃。

'c17'

'c18'

'iso9899:2017'

'iso9899:2018'

ISO C17,是ISO C标准的2017年修订版(2018年出版)。这个标准与C11相同,除了对一些缺陷的修正(所有这些修正也已应用于-std=c11),还有__STDC_VERSION__增加了一个新值,所以支持程度与C11相同。可以看作和C11一样。

'c2x'

ISO C标准的下一个版本,仍在开发中。对这个版本的支持是试验性的,不完整的。

'gnu90'

'gnu89'

ISO C90的GNU定制版(包括一些C99特性)。

'gnu99'

'gnu9x'

ISO C99 的 GNU 定制版。名称'gnu9x'已被弃用。

'gnu11'

'gnu1x'

ISO C11的GNU 定制版。名称'gnu1x'已被弃用。

'gnu17'

'gnu18'

ISO C17的GNU 定制版。这是C代码的默认使用选项。

'gnu2x'

ISO C标准的下一个版本,仍在开发中,还包括GNU扩展。对这个版本的支持是试验性的,不完整的。

'c++98'

'c++03'

1998年的ISO C++标准加上2003年的技术更正和一些额外的缺陷报告。与C++代码的-ansi相同。

'gnu++98'

'gnu++03'

-std=c++98的GNU定制版。

'c++11'

'c++0x'

2011年的ISO C++标准加上修正案。'c++0x'这个名字已被废弃。

'gnu++11'

'gnu++0x'

-std=c++11的GNU定制版。名称'gnu++0x'已被弃用。

'c++14'

'c++1y'

2014年的ISO C++标准加上修正案。名称'c++1y'已被弃用。

'gnu++14'

'gnu++1y'

GNU方言的-std=c++14。名称'gnu++1y'已被弃用。

'c++17'

'c++1z'

2017年的ISO C++标准加上修正案。名称'c++1z'已被弃用。

'gnu++17'

'gnu++1z'

GNU定制版的-std=c++17。这是对C++代码的默认使用选项。名称'gnu++1z'已被废弃。

'c++20'

'c++2a'

2020年的ISO C++标准加上修正案。支持是实验性的,在未来的版本中可能会有不兼容的变化。名称'c++2a'已被弃用。

'gnu++20'

'gnu++2a'

-std=c++20 的 GNU 定制版。支持是试验性的,在未来的版本中可能会有不兼容的变化。名称'gnu++2a'已被弃用。

'c++2b'

'c++23'

ISO C++标准的下一个修订版,计划于2023年发布。支持是高度实验性的,在未来的版本中几乎肯定会有不兼容的变化。

'gnu++2b'

'gnu++23'

-std=c++2b 的 GNU 定制版。支持是高度实验性的,在未来的版本中几乎肯定会发生不兼容的变化。

参考:

C Dialect Options (Using the GNU Compiler Collection (GCC))

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值