![]() |
1
73
如果可能的话,gcc编译器总是尝试编译您的程序。然而,在一些
案例中,C和C++标准规定禁止某些扩展。合格编译器
如gcc或g++在遇到这些扩展时必须发出诊断。例如,
gcc编译器_s-pedantic选项导致gcc在这种情况下发出警告。使用更严格的
|
![]() |
2
96
我总是在编码时使用它。
这个
|
![]() |
3
16
如果没有这个开关,最近的gcc c编译器将符合 ISO/IEC 9899:2011标准 . 不幸的是,有些懒惰的编译器供应商认为,坚持使用旧的过时的标准版本是可以接受的,标准化文档甚至不能从标准体中获得。 使用该开关有助于确保代码应该在这些过时的编译器中编译。
这个
这个 C11 draft n1570 paragraph 6.7.6.2p1 says :
C标准要求数组长度大于零;此段落位于 约束条件 标准规定如下: 5.1.1.3p1 :
但是,如果用
因此,为了实现最大的可移植性,指定标准修订版是不够的,您还必须使用
问题的最后一部分是关于使用
|
![]() |
4
14
基本上,它将使您的代码更容易在其他编译器(这些编译器也实现了ANSI标准)下编译,并且,如果您在使用的库/API调用中很小心,在其他操作系统/平台下编译也会更容易。 第一个,关闭gcc的特定特性。(ANSI) 第二个,将抱怨任何不符合标准的东西(不仅是GCC的特定特性,而且是您的构造)。 |
![]() |
5
5
如果你的代码需要
便携式的
然后,您可以测试它是否在没有任何GCC扩展或其他非标准特性的情况下编译。如果您的代码与
|
![]() |
6
3
如果您编写的代码设想将在各种平台上编译,使用许多不同的编译器,那么您自己使用这些标志将有助于确保不会生成只在gcc下编译的代码。 |
![]() |
7
1
其他人回答得很充分。我只想添加一些常见扩展的示例:
这个
另一个流行的扩展是能够在其他函数中声明和定义函数:
这是不标准的。如果你想要这种行为,看看 C++11 lambdas |
![]() |
8
0
Pedantic这样做是为了让GCC编译器拒绝所有GNUC扩展,而不仅仅是那些使其与ANSI兼容的扩展。 |
|
user8659414 · Make无法识别我的库! 7 年前 |
![]() |
Hei · Linux上写入共享内存的周期性延迟峰值 7 年前 |
![]() |
Zach Saw · 将函数作为模板参数传递[重复] 7 年前 |
|
Oberon311 · 链接器错误:未定义对函数的引用 7 年前 |
![]() |
kreuzerkrieg · 阴影和GCC-Wshadow 7 年前 |
![]() |
ar2015 · 在汇编代码中查找循环或数字 7 年前 |