【发布时间】:2015-03-13 11:43:49
【问题描述】:
我需要将我的作业上传到在线编译器,我被告知它是 GCC,但我在在线编译器上遇到了段错误,但在使用 VS 或在 linux 的 GCC 上编译时却没有。
有没有办法让编译器打印它是什么编译器及其版本?
【问题讨论】:
标签: c syntax compilation
我需要将我的作业上传到在线编译器,我被告知它是 GCC,但我在在线编译器上遇到了段错误,但在使用 VS 或在 linux 的 GCC 上编译时却没有。
有没有办法让编译器打印它是什么编译器及其版本?
【问题讨论】:
标签: c syntax compilation
通常没有一个命令。
您可以尝试检查编译器定义的宏。
cmake 会这样做,它有大量的检查来检测编译器版本。
它编译代码并根据预处理器符号打印“供应商字符串”。
例如 gcc 的代码:https://github.com/Kitware/CMake/blob/master/Modules/Compiler/GNU-DetermineCompiler.cmake
由于 clang 是 gcc 的替代品,您可能还需要检查此处使用的宏:
https://github.com/Kitware/CMake/blob/master/Modules/Compiler/Clang-C-FeatureTests.cmake
编辑:
因此,一个正在运行的 C 示例将执行以下操作:
#include <stdio.h>
int main(int argc, char **argv) {
#ifdef __clang_major__
printf ("clang detected version %d.%d\n", __clang_major__, __clang_minor__);
#endif
#ifdef __GNUC__
// note that clang 3.7 declares itself as a gcc 4.2"
printf ("gcc detected version %d.%d\n", __GNUC__, __GNUC_MINOR__);
#endif
}
clang 的输出:
$ clang main.cc
$ ./a.out
clang detected version 3.7
gcc detected version 4.2
gcc 的输出:
$ gcc main.cc
$ ./a.out
gcc detected version 4.8
【讨论】: