如何打印适用于许多编译器的 C++ 编译器版本?

问题描述 投票:0回答:1

我希望我的 C++ 程序在启动时打印用于编译它的编译器。我希望它可以在许多编译器上工作。似乎没有标准方法可以做到这一点,但我怎样才能让它工作呢?

不想想要运行编译器来检查其版本。我希望在 10 年内找到这个二进制文件,并想要一些有关我如何编译它的信息(以及我应该使用哪个存档工具链来创建新版本)。

这个问题有特定于编译器的版本:

c++ version
1个回答
0
投票

将这个问题的编译器特定版本放在一起,我们可以创建一个更可移植的版本:

#include <cstdio>

#if defined(__GNUC__)
    #if defined(__clang__)
        #define COMPILER_FMT "Clang: %s"
    #else
        #define COMPILER_FMT "GNUC: %s"
    #endif
    #define COMPILER_VERSION __VERSION__
#elif defined(_MSC_VER)
    #define COMPILER_FMT "MSVC: %d"
    #define COMPILER_VERSION _MSC_FULL_VER
#else
    #error Please add your compiler here.
#endif

int main() {
    printf("Built with " COMPILER_FMT "\n", COMPILER_VERSION);
    printf("C++ version: %ld\n", __cplusplus);
}

叮当

使用 Clang 构建:4.2.1 兼容 Clang 7.0.1 (Fedora 7.0.1-6.fc29)

C++版本:201402

海湾合作委员会

使用 GNUC 构建:8.3.1 20190223(红帽 8.3.1-2)

C++版本:201402

我本地的 Visual Studio:

使用 MSVC 构建:190024234

C++版本:199711

© www.soinside.com 2019 - 2024. All rights reserved.