【问题标题】:Is there a command that tells the compiler to print its version?是否有命令告诉编译器打印其版本?
【发布时间】:2015-03-13 11:43:49
【问题描述】:

我需要将我的作业上传到在线编译器,我被告知它是 GCC,但我在在线编译器上遇到了段错误,但在使用 VS 或在 linux 的 GCC 上编译时却没有。

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

【问题讨论】:

  • 这是UB 的主要标志。我建议先仔细检查您的代码。
  • 不要关注代码为什么没有运行,而是帮助他在本地机器上重现它。
  • 这个question 将告诉您如何以编程方式获取版本,但您需要弄清楚代码有什么问题。这不太可能是编译器错误,在这种情况下版本号并不重要
  • @Alex 你能详细说明一下吗?
  • @SouravGhosh 他说在线编译器有段错误。他的 home box 运行代码很好。因此,显然他想通过在他的盒子上获取段错误来找出他的代码有什么问题。当你看到它的段错误时,最容易找出未定义的行为。

标签: c syntax compilation


【解决方案1】:

通常没有一个命令。

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

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

【讨论】:

  • 我不知道如何让这段代码打印出来。此外,两个链接中的两个代码都会产生许多错误。
  • 我不知道怎么用...你能告诉我要查什么吗?我是否需要在我的代码中添加一些类似于 CMake 代码中的宏?
猜你喜欢
  • 2014-10-19
  • 2017-01-02
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2021-06-30
  • 2019-09-13
相关资源
最近更新 更多