2015-03-13 82 views
0

我需要将我的作业上传到在线编译器,我被告知它是GCC,但我在线编译器上获得了段错误,但是在编译VS或Linux的GCC时没有。有没有告诉编译器打印其版本的命令?

有没有办法让编译器打印它是什么编译器及其版本?

+2

这就是[UB]主符号(https://en.wikipedia.org/wiki/Undefined_behavior)。我建议首先仔细检查你的代码。 – 2015-03-13 11:44:46

+1

不关注为什么代码没有运行,但帮助他在他的本地盒子上重现它。 – Alex 2015-03-13 11:49:45

+1

这[问题](http://stackoverflow.com/q/1936719/1708801)会告诉你如何以编程方式获取版本,但你需要弄清楚代码有什么问题。这不太可能是一个编译器错误,在这种情况下版本号并不重要 – 2015-03-13 11:50:02

回答

1

通常没有一个命令。

你可以尝试和检查编译器定义的宏。

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 
+0

我不知道如何让这段代码打印一些东西。此外,两个链接中的两个代码都会产生很多错误。 – shinzou 2015-03-13 11:59:44

+0

我不知道如何使用它...你能告诉我要查找什么吗?我是否需要为我的代码添加一些类似于CMake代码的宏? – shinzou 2015-03-14 11:22:08

+0

哦,我没看到你编辑过这个。它运作良好,谢谢。 – shinzou 2015-03-31 19:27:21

相关问题