【发布时间】:2014-05-21 20:36:54
【问题描述】:
C 编程新手。
在 gcc -std 中设置编译的 C 标准,例如gcc -std=c99.
是否可以知道当前设置了哪个 C 标准?
【问题讨论】:
-
@ooga 你是对的,这完全是同一个问题。但是,在所有答案中,我找到了如何设置 C 标准,而不是如何检索它。
C 编程新手。
在 gcc -std 中设置编译的 C 标准,例如gcc -std=c99.
是否可以知道当前设置了哪个 C 标准?
【问题讨论】:
在各种模式下定义了各种预处理器符号。您可以使用gcc -E -dM -x c /dev/null 获取所有预定义的预处理器符号的转储。
在 C99 模式下(-std=c99 或 -std=gnu99),符号 __STDC_VERSION__ 定义为 199901L。在 C11 模式下(使用-std=c11 或std=gnu11),它是201112L
在严格的 C 模式下(-std=cXX 与 -std=gnuXX 相对),符号 __STRICT_ANSI__ 定义为 1
【讨论】:
gcc -E -dM 给了我 gcc: 致命错误:没有输入文件。编译终止。 在 Ubuntu 和 Windows 中。
.c 或.cpp 扩展名的空文件。
echo | cpp -dM,转储相同的预定义预处理器设置(并且不需要编译文件)。
您可以使用此程序打印默认值:
#include <stdio.h>
int main() {
#ifdef __STRICT_ANSI__
printf("c");
#else
printf("gnu");
#endif
#ifdef __STDC_VERSION__
#if __STDC_VERSION__ == 199901L
puts("99");
#elif __STDC_VERSION__ == 201112L
puts("11");
#else
puts("(unknown)");
#endif
#else
puts("90");
#endif
return 0;
}
【讨论】: