是否为 -std=c99 提供了子选项,以便我可以通过这些子选项并避免通过 -std=c99?
例如:
int main()
{
for(int i=0;i<10;i++)
{
i++;
}
return 0;
}
我会通过传递任何子选项来用 gcc 编译这段代码。
$ gcc -sub-option-for-c99 ac
谢谢
编辑:我只想从 C99 中选择一个特性,同时将编译器的其余部分保持在 C89(或其他)模式。
是否为 -std=c99 提供了子选项,以便我可以通过这些子选项并避免通过 -std=c99?
例如:
int main()
{
for(int i=0;i<10;i++)
{
i++;
}
return 0;
}
我会通过传递任何子选项来用 gcc 编译这段代码。
$ gcc -sub-option-for-c99 ac
谢谢
编辑:我只想从 C99 中选择一个特性,同时将编译器的其余部分保持在 C89(或其他)模式。
C99 没有太多的子设置功能(基本上没有子设置)。C11 确实对此有一些规定。但是,实现的细节往往由实现控制,而不是程序员可以通过整体开关(例如-std=c11
或)改变的东西-std=gnu11
。这是说“不”的冗长方式。
C11 中的子设置示例:附件 K(以前的 TR 24731-1)边界检查接口。
程序可以通过定义来表明它想要使用这些设施__STDC_WANT_LIB_EXT1__
,但是如果实现本身没有定义,那将无济于事__STDC_LIB_EXT1__
。
来自 ISO/IEC 9899:2011 的更完整的子设置列表(Corr.1 应用于 的值__STDC_LIB_EXT1__
):
6.10.8.3 条件特征宏
¶1以下宏名称由实现有条件地定义:
__STDC_ANALYZABLE__
整数常数 1,旨在表明符合附录 L(可分析性)中的规范。__STDC_IEC_559__
整数常量 1,旨在表明符合附件 F(IEC 60559 浮点运算)中的规范。__STDC_IEC_559_COMPLEX__
整数常量 1,旨在表明符合附录 G(IEC 60559 兼容的复数运算)中的规范。__STDC_LIB_EXT1__
整数常量 201112L,用于表示对附件 K(边界检查接口)中定义的扩展的支持。179)__STDC_NO_ATOMICS__
整数常量 1,意在表明实现不支持原子类型(包括_Atomic
类型限定符)和<stdatomic.h>
标头。__STDC_NO_COMPLEX__
整数常量 1,意在表明实现不支持复杂类型或标头。__STDC_NO_THREADS__
整数常量 1,意在表明实现不支持<threads.h>
头文件。__STDC_NO_VLA__
整数常量 1,旨在表明实现不支持可变长度数组或可变修改类型。¶2定义
__STDC_NO_COMPLEX__
不应定义 的实现__STDC_IEC_559_COMPLEX__
。179)目的是保持一个整数常量,
long int
随着本国际标准的每次修订而增加。
有关相关信息,另请参阅第6.10.8 节预定义的宏名称。
请注意,这些宏是由实现定义或不定义的,具体取决于它支持或不支持的内容。如果您尝试自己设置它们,那将没有任何区别;它们旨在用于与您进行通信的实现,反之亦然。
¶2以下宏名称由实现有条件地定义:
__STDC_IEC_559__
整数常量 1,旨在表明符合附件 F(IEC 60559 浮点运算)中的规范。__STDC_IEC_559_COMPLEX__
整数常量 1,旨在表明遵守信息性附录 G(IEC 60559 兼容的复数算术)中的规范。__STDC_ISO_10646__
yyyymmL 形式的整数常量(例如 199712L),用于指示 wchar_t 类型的值是 ISO/IEC 10646 定义的字符的编码表示,以及指定年份和月份的所有修订和技术勘误.¶3 预定义宏的值(除了
__FILE__
和__LINE__
)在整个翻译单元中保持不变。¶4 这些宏名称和定义的标识符都不应成为 a
#define
或#undef
预处理指令的主题。任何其他预定义的宏名称应以前导下划线开头,后跟大写字母或第二个下划线。¶5实现不应预定义宏
__cplusplus
,也不应在任何标准头文件中定义它。
6.10.8 节及其子节在 ISO/IEC 9899:2011 中类似,但所讨论的宏集更为广泛。
我不这么认为,这通常是预处理器的任务
#if __STDC_VERSION__ < 199901L
int i;
for(i=0;i<10;i++)
#else
for(int i=0;i<10;i++)
#endif
虽然在这种情况下看起来有点愚蠢。
是否为 -std=c99 提供了子选项,以便我可以通过这些子选项并避免通过 -std=c99
不!gcc 没有提供任何此类规定。通过 -std=c99 并享受。
这个-std=
论点怎么样:
'gnu89' ISO C90 的 GNU 方言(包括一些 C99 功能)。这是 C 代码的默认设置。