Cpp学习2 编译器配置、语言标准
0.9 配置你的编译器:构建配置
一个构建配置(也叫做 构建目标)是一套 决定你的IDE如何构建你的项目 的项目设置。
可执行文件如何命名,去什么位置找其他代码文件和库文件,要不要调试信息,编译器优化程序到什么程度…除非有什么特别的原因,一般用默认设置。
创建新项目时,大部分IDE会设置两套不同的构建配置:发布配置 和 调试配置。release/debug
调试配置 被设计用于 帮助你调试程序。这个配置会关闭所有优化,显示调试信息(让你的程序更大、更慢,但更方便debug)。debug配置经常是默认的活跃配置。
发布配置 是把你的程序公开发布时用的。有优化,不包括额外的调试信息。因为发布配置包括所有优化,这个模式适合用来测试你的代码性能。
尽管你可以创建你自己的构建配置,但一般用不着。除非,需要用不同的编译器配置。
一些IDE(比如Visual Studio)可以为不同的平台创建不同的构建配置。
在修改任何项目设置时,建议你同时在所有生成配置(build configurations)中应用该更改。如果只改了 Debug 的某个设置而忘了改 Release,那么当切换配置时,可能会遇到不一致的编译结果或运行时错误。
0.10 配置你的编译器:编译器扩展
“编译器特定”行为被称为 编译器扩展。
使用了一个编译器扩展的程序可以做到C++标准做不到的事。不过可移植性会变差。
非常坏的是,编译器扩展通常默认开启,这对初学者非常不友好,会让他们以为某些行为是C++标准。
所以接下来的学习,关闭 compiler extensions。
在Visual Studio的项目的设置里 Configuration:All Configurations; C/C++ > Language ; 将 Conformance mode 设置为 Yes(/permissive-)
0.11 配置你的编译器:警告与错误等级
diagnostic message 诊断信息;简称 diagnostic ,诊断
C++标准没有定义诊断信息的类别之类的。现代编译器一般是这么分类的:
- diagnostic error诊断错误 error错误。直接中断编译。这些错误经常被叫做编译错误。
- diagnostic warning诊断警告 warning警告。不会中断编译。
编译器来决定一个非阻塞性问题究竟是警告还是错误。尽管不同编译器在分类上通常保持一致,但在某些情况下也可能出现分歧——针对同一个问题,一个编译器会报错(error),而另一个编译器则只给出警告(warning)。
为了帮助你找到issue的位置,诊断信息会给出文件名和行号;预期vs实际发现的。实际问题可能就在那一行,也可能在它前面的某一行。
别让warnings堆积起来。以免和严重issue有关的warning被埋没。
你可以选择更高等级的warning检查。
提高warning等级,尤其是在学习的时候。
开启有符号/无符号转换警告
第一步:
进入 C/C++ → 命令行(Command Line) 选项卡,在 “其他选项(Additional Options)” 中添加 /w44365。
这告诉编译器,以警告等级 4(你之前已启用该等级)来启用有符号/无符号转换警告。
第二步:
进入 C/C++ → 外部包含项(External Includes) 选项卡,将 “外部头文件警告等级(External Header Warning Level)” 设置为 Level3(/external:W3)。
这告诉编译器,以警告等级 3(而不是等级 4)来编译标准库头文件,这样在编译这些头文件时就不会触发上述警告。
需要说明的是,“外部包含项(External Includes)” 选项卡在上方的截图中并未显示,但它在 VS Community 2019 或更新版本中会出现在 “浏览信息(Browse Information)” 和 “高级(Advanced)” 选项卡之间。你可以查看此链接,其中包含该对话框的最新照片,其中显示了 “外部包含项” 选项卡。
把warnings当做errors对待
启用”Treat warnings as errors“。这样你就必须修复所有warnings了。(M?)
0.12 配置你的编译器:选择一个语言标准
用Visual Studio的话,每次创建项目都要重新选择语言标准。
导出项目配置:项目->导出模版
在哪里可以查看 C++ 标准文档?
每个 C++ 语言标准都由一份标准文档来描述,这是一份正式的技术文档,是特定语言标准中各项规则和要求的权威来源。标准文档并非为学习而设计——相反,它是为编译器编写者能够准确地实现新语言标准而准备的。你偶尔会看到人们在解释某些机制的工作原理时引用标准文档。
某一语言标准的已批准版 C++ 标准文档并非免费提供。 here有一个购买最新标准的链接。
当新的语言标准正在制定过程中时,会发布草案标准文档供审阅。这些草案可以在线免费获取。已批准标准之前的最后一份草案标准通常与官方标准非常接近,足以满足大多数使用目的。你可以在 here找到草案标准。
0.13 我的编译器在使用什么语言标准?
1 | // This program prints the C++ language standard your compiler is currently using |
第0章结束。
- 标题: Cpp学习2 编译器配置、语言标准
- 作者: 铁名_IronName
- 创建于 : 2026-08-06 10:35:38
- 更新于 : 2026-08-06 12:49:53
- 链接: https://blog.ironname.top/2026/Cpp/Cpp学习2/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。