我的编译器使用的是哪种语言标准?

检查编译器语言标准

以下程序旨在打印出您的编译器当前正在使用的语言标准名称。您可以复制/粘贴,编译并运行此程序,以验证您的编译器是否使用了您预期的语言标准。

PrintStandard.cpp 程序

#include <iostream>

const int numStandards = 7;
// C++26 stdCode是一个占位符,因为确切的代码将在标准最终确定后才能确定
const long stdCode[numStandards] = { 199711L, 201103L, 201402L, 201703L, 202002L, 202302L, 202612L};
const char* stdName[numStandards] = { "Pre-C++11", "C++11", "C++14", "C++17", "C++20", "C++23", "C++26" };

long getCPPStandard()
{
    // Visual Studio在支持__cplusplus方面是非一致的(除非你设置了特定的编译器标志,你可能没有)
    // 在Visual Studio 2015或更新版本中,我们可以使用_MSVC_LANG代替
    // 参见 https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
#if defined (_MSVC_LANG)
    return _MSVC_LANG;
#elif defined (_MSC_VER)
    // 如果我们使用的是较旧版本的Visual Studio,则退出
    return -1;
#else
    // __cplusplus是查询语言标准代码的预期方式(根据语言标准定义)
    return __cplusplus;
#endif
}

int main()
{
    long standard = getCPPStandard();

    if (standard == -1)
    {
        std::cout << "Error: Unable to determine your language standard.  Sorry.\n";
        return 0;
    }
    
    for (int i = 0; i < numStandards; ++i)
    {
        // 如果报告的版本是已最终确定的标准代码之一
        // 那么我们知道编译器运行的确切版本
        if (standard == stdCode[i])
        {
            std::cout << "Your compiler is using " << stdName[i]
                << " (language standard code " << standard << "L)\n";
            break;
        }

        // 如果报告的版本介于两个已最终确定的标准代码之间,
        // 这必须是对下一个即将发布的版本的预览/实验性支持。
        if (standard < stdCode[i])
        {
            std::cout << "Your compiler is using a preview/pre-release of " << stdName[i]
                << " (language standard code " << standard << "L)\n";
            break;
        }
    }
    
    return 0;
}

常见问题解决

构建或运行时问题

如果您在尝试构建此程序时遇到错误,可能是因为您的项目设置不正确。请参见0.8 —— 一些常见的C++问题,以获得一些常见问题的建议。如果这没有帮助,请从0.6 —— 安装集成开发环境(IDE)开始复习课程。

如果程序打印出"Error: Unable to determine your language standard",则您的编译器可能是非一致的。如果您使用的是流行的编译器并且情况确实如此,请在下面留下评论并提供相关信息(例如编译器的名称和版本)。

标准不匹配问题

如果此程序打印出与您预期不同的语言标准:

  1. 检查您的IDE设置,确保您的编译器配置为使用您预期的语言标准。有关如何为一些主要编译器执行此操作的更多信息,请参见0.12 —— 配置您的编译器:选择语言标准。

  2. 确保没有拼写错误或格式错误。一些编译器要求为每个项目而不是全局设置语言标准,因此如果您刚刚创建了新项目,这可能是这种情况。

  3. 您的IDE或编译器甚至可能没有读取您正在编辑的配置文件(我们偶尔会看到有关VS Code的读者反馈)。如果情况似乎如此,请查阅您的IDE或编译器的文档。

关于预览版本的问题

Q:如果我的编译器使用的是预览/预发布版本,我应该回退一个版本吗?

如果您只是学习这门语言,这并不必要。只是要知道,即将发布的语言版本的一些功能可能缺失、不完整、有缺陷,或者可能会略有变化。

关注公众号,回复"cpp-tutorial"

可领取价值199元的C++学习资料

公众号二维码

扫描上方二维码或搜索"cpp-tutorial"