是否有命令告诉编译器打印其版本?
Is there a command that tells the compiler to print its version?
我需要将我的作业上传到在线编译器,有人告诉我它是 GCC,但我在在线编译器上遇到了段错误,但在使用 VS 或 linux 的 GCC 编译时却没有。
有没有办法让编译器打印出它是什么编译器及其版本?
通常没有一个命令。
您可以尝试检查编译器定义的宏。
cmake 就是这样做的,它有广泛的检查来检测编译器版本。
它编译代码并根据预处理器符号打印 "vendor string"。
例如,这里是 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
我需要将我的作业上传到在线编译器,有人告诉我它是 GCC,但我在在线编译器上遇到了段错误,但在使用 VS 或 linux 的 GCC 编译时却没有。
有没有办法让编译器打印出它是什么编译器及其版本?
通常没有一个命令。
您可以尝试检查编译器定义的宏。
cmake 就是这样做的,它有广泛的检查来检测编译器版本。
它编译代码并根据预处理器符号打印 "vendor string"。
例如,这里是 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