【问题标题】:How to get current c dialect in gcc?如何在 gcc 中获取当前的 c 方言?
【发布时间】:2014-05-21 20:36:54
【问题描述】:

C 编程新手。
在 gcc -std 中设置编译的 C 标准,例如gcc -std=c99.
是否可以知道当前设置了哪个 C 标准?

【问题讨论】:

标签: c gcc dialect


【解决方案1】:

在各种模式下定义了各种预处理器符号。您可以使用gcc -E -dM -x c /dev/null 获取所有预定义的预处理器符号的转储。

在 C99 模式下(-std=c99-std=gnu99),符号 __STDC_VERSION__ 定义为 199901L。在 C11 模式下(使用-std=c11std=gnu11),它是201112L

在严格的 C 模式下(-std=cXX-std=gnuXX 相对),符号 __STRICT_ANSI__ 定义为 1

【讨论】:

  • gcc -E -dM 给了我 gcc: 致命错误:没有输入文件。编译终止。 在 Ubuntu 和 Windows 中。
  • @Salvador:是的,你需要给编译器驱动程序至少一个输入文件,以便它知道要编译哪种语言。你可以给它任何现有的文件,或者创建一个带有.c.cpp 扩展名的空文件。
  • 抱歉,新手需要准备好使用代码作为echo | cpp -dM,转储相同的预定义预处理器设置(并且不需要编译文件)。
【解决方案2】:

您可以使用此程序打印默认值:

#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多