我需要将我的作业上传到在线编译器,我被告知它是GCC,但我在线编译器上获得了段错误,但是在编译VS或Linux的GCC时没有。有没有告诉编译器打印其版本的命令?
有没有办法让编译器打印它是什么编译器及其版本?
我需要将我的作业上传到在线编译器,我被告知它是GCC,但我在线编译器上获得了段错误,但是在编译VS或Linux的GCC时没有。有没有告诉编译器打印其版本的命令?
有没有办法让编译器打印它是什么编译器及其版本?
通常没有一个命令。
你可以尝试和检查编译器定义的宏。
cmake做到了这一点,它有一个检测编译器版本的广泛检查。
它编译代码并打印基于预处理器符号的“供应商字符串”。
这里是例如用于GCC代码:https://github.com/Kitware/CMake/blob/master/Modules/Compiler/GNU-DetermineCompiler.cmake
因为铛是降更换为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 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
这就是[UB]主符号(https://en.wikipedia.org/wiki/Undefined_behavior)。我建议首先仔细检查你的代码。 – 2015-03-13 11:44:46
不关注为什么代码没有运行,但帮助他在他的本地盒子上重现它。 – Alex 2015-03-13 11:49:45
这[问题](http://stackoverflow.com/q/1936719/1708801)会告诉你如何以编程方式获取版本,但你需要弄清楚代码有什么问题。这不太可能是一个编译器错误,在这种情况下版本号并不重要 – 2015-03-13 11:50:02