小米科技|致完美主义者:0个错误,0个警告

小米科技|致完美主义者:0个错误,0个警告

文章图片

小米科技|致完美主义者:0个错误,0个警告

文章图片

小米科技|致完美主义者:0个错误,0个警告

文章图片

小米科技|致完美主义者:0个错误,0个警告

文章图片

小米科技|致完美主义者:0个错误,0个警告

文章图片

小米科技|致完美主义者:0个错误,0个警告

文章图片


首先 , 我假定你是一个完美主义者 。
在一个项目中 , 为了实现完美而干净利落的代码 , 你开启了最严格的的编译警告级别 , 或者使用了最为严格的代码分析规则 , 但对于那些不属于你的项目中的外部代码库 , 你还是会看到一大波编译警告 , 对于一个完美主义者来说 , 编译完成后没有看到”0错误0警告”是绝对不能接受的 。
在Visual Studio 2019预览版中 , 我们提供了一种简单的方法来将这些头文件声明为外部头文件来解决这个问题 。 为了解决这个问题 , 我们的开发团队已经工作了好一阵子了 , 感谢这个开发工程中来自社区的帮助和意见反馈 。 当我们添加了添加外部头文件的实验功能的时候 , 我们还专门写过一篇文章来介绍这个功能 。 现在 , 我很高兴地宣布 , 感谢所有社区开发者反馈 , 外部头文件功能现已正式被编译器和代码分析器所支持 , 并已内建到集成开发环境中 。
这些外部头文件可以自定义编译器的警告级别 , 代码分析规则和模板分析设定 。 这个自定义功能 , 可以让你自由地为工程代码选择严格的设置 , 以确保代码的质量 , 同时 , 也不会因为外部头文件的警告太多给你的完美主义带来障碍 。
添加外部头文件到你的工程中在你的工程的”VC++ 目录”中 , 有一个”外部包含目录”的属性 , 可以用来定义外部头文件所在的目录位置 。 这个属性会被正常地添加到头文件的搜索路径中 , 但是所有在这个目录中的头文件都将被视为外部头文件 。 从编译器的视角来说 , 你将不会感受任何不同之处 , 但是你可以为这些外部头文件设置不同的警告级别和其他代码分析级别 。

在默认情况下 , 编译工具集和Windows SDK目录中的头文件都会被视为外部头文件 。 另外 , 你也可以添加任何其他的头文件目录(例如 , 一些第三方代码库)到这个属性中 , 多个目录路径可以使用一个分号区分 。
请注意 , 这个新的属性会被之前版本的工具集忽略掉 。 如果你希望使用旧版本的编译器编译工程代码 , 你需要确保所有”外部包含目录”属性的值也必须包含在”包含目录”属性中 , 否则 , 旧版本的编译器就不会找到这些头文件位置 。
为了保持兼容性 , 在Visual Studio 2019中 , 我们将会继续包含工具集和Windows SDK头文件在现有的”包含目录”属性中 , 但是在下个大版本中 , 它们将会从这个属性中移除 。
自定义外部头文件的警告级别你可以在工程属性对话框的”C/C++ > 外部包含目录”属性中自定义外部头文件的警告级别 , 如下图所示:

自定义外部头文件的代码分析设定
通过将头文件声明为外部头文件 , 也能让代码分析器使用起来得心应手 。