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

如何适配g++编译器至对应C++标准?及g++7.2.0支持标准查询

C标准与编译器版本的关系,以及g7.2.0的配置指南

一、关于C++标准和版本的表述确认

你的说法完全正确!

  • C本身没有“版本”的概念,它是由国际标准化组织(ISO)发布的编程语言规范标准,比如我们常说的C11、C14、C17、C++20等,这些都是不同年份发布的标准版本号,用来定义语言的语法、特性和行为规范。
  • 而C编译器(比如g、Clang、MSVC等)才有自己的版本划分(比如g7.2.0、Clang 16等),每个编译器版本会针对不同的C标准提供不同程度的支持——有的标准可能完全实现,有的可能只支持部分特性,还有的可能需要通过实验性选项开启。

二、g7.2.0支持的C标准

g7.2.0是2017年发布的版本,对各C标准的支持情况如下:

  • C++98/03:完全支持,这是早期g++版本默认的旧标准(如果不指定标准,编译器会默认使用这个)
  • C++11:完全支持,从g4.8.x开始就已经实现了C11的绝大多数特性,到7.2.0已经是完整支持状态
  • C++14:完全支持,g从5.x版本开始就完整支持C14
  • C++17:部分支持,这是当时刚正式发布的新标准,g++7.2.0已经实现了大部分核心特性,但还有一些边缘特性(比如部分并行算法、某些constexpr扩展等)没有完全落地,部分特性可能需要额外编译选项
  • C++20:几乎不支持,仅包含极少数实验性的早期特性,不建议在这个版本编译器中尝试使用C++20

三、在原生Makefile中配置g7.2.0适配对应C标准

要让g按照指定的C标准编译,只需要在Makefile的CXXFLAGS(C++编译选项)中添加-std=<标准标识>即可,常见的标识有两种:

  • -std=c++xx:严格遵循对应的C++标准,禁用所有GNU扩展特性
  • -std=gnu++xx:默认模式,在遵循标准的同时保留GNU特有的扩展(比如内置函数、语法扩展等,大多数场景下推荐用这个)

示例Makefile

# 指定使用g++7.2.0作为编译器(如果系统中有多个g++版本,可能需要写全路径,比如/usr/local/bin/g++-7)
CXX = g++
# 配置编译选项:指定C++14标准,同时开启基础警告和优化
CXXFLAGS += -std=gnu++14 -Wall -Wextra -O2

# 最终生成的可执行文件名称
TARGET = my_cpp_program
# 项目的源文件列表
SRCS = main.cpp helper.cpp data_process.cpp

# 默认构建目标
all: $(TARGET)

# 编译规则:将所有源文件编译链接成目标程序
$(TARGET): $(SRCS)
	$(CXX) $(CXXFLAGS) -o $@ $^

# 清理生成的文件
clean:
	rm -f $(TARGET)

对应不同标准的编译选项

如果要切换到其他标准,只需要修改CXXFLAGS中的-std参数:

  • 适配C++11:-std=gnu++11 或 -std=c++11
  • 适配C++14:-std=gnu++14 或 -std=c++14
  • 适配C17:-std=gnu++17 或 -std=c++17(注意g7.2.0对C++17的支持是部分的,编译时可能会遇到某些特性未实现的报错)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:22:33