我希望我的 C++ 程序在启动时打印用于编译它的编译器。我希望它可以在许多编译器上工作。似乎没有标准方法可以做到这一点,但我怎样才能让它工作呢?
我不想想要运行编译器来检查其版本。我希望在 10 年内找到这个二进制文件,并想要一些有关我如何编译它的信息(以及我应该使用哪个存档工具链来创建新版本)。
这个问题有特定于编译器的版本:
将这个问题的编译器特定版本放在一起,我们可以创建一个更可移植的版本:
#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