You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GNU GCC中启用C++23遇阻:为何仍识别为C++20?

问题原因及解决办法

为什么编译器把代码识别为C++20?

GCC 13虽宣称支持C23,但标准库的std模块尚未完成正式实现。目前GCC里的import std是基于C20时期的「模块技术规范(Modules TS)」做的实验性支持,而非C23标准规定的正式标准库模块。所以即便你指定了-std=c++23或-std=c++2b,编译器仍会把import std当成C20 TS的语法,报错提示需启用-fmodules-ts。

怎么解决?

有两种可行方式:

  1. 暂时改用传统写法(最省心)
    把import std;替换成#include <iostream>,代码修改为:

    #include <iostream>
    
    int main()
    {
        std::cout << "Hello, World!\n";
    }
    

    再用原命令编译:g++-13 -std=c++23 hello_world.cpp -o hello,即可正常运行。

  2. 尝试启用模块TS支持(有局限性)
    若一定要用import语法,需手动添加-fmodules-ts参数,同时预编译标准库模块(GCC默认未提供预编译好的std模块):

    • 先预编译iostream头文件为模块:
      g++-13 -std=c++23 -fmodules-ts -xc++-system-header iostream
      
    • 再编译你的程序:
      g++-13 -std=c++23 -fmodules-ts hello_world.cpp -o hello
      

    注意:这种方式属于实验性支持,不同版本GCC可能出现兼容性问题,且仅支持单个头文件的模块导入,并非完整的std模块。

内容的提问来源于stack exchange,提问作者Hello Hello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:52:38