MSVC的C语言模式能否配置为遇到未声明函数时直接抛出编译错误?
解决MSVC C模式下未声明函数默认隐式声明的问题
MSVC默认针对.c后缀的源文件使用兼容C89的编译模式,C89标准允许隐式函数声明,因此编译器遇到未声明的函数时会默认推定返回值为int、参数不做校验,才会出现未声明函数被错误推定、后续输出大量无关报错的问题。
可以通过以下两种方案配置,让编译器遇到未声明函数时直接抛出错误:
方案1:指定使用C99及以上标准(推荐)
C99及更新的C标准已经完全移除了隐式函数声明的特性,设置后编译器遇到未声明函数会直接报错,不会做隐式推定:
Visual Studio IDE配置步骤
- 右键项目打开「属性」面板
- 依次展开「配置属性 -> C/C++ -> 语言」
- 在「C语言标准」下拉项中选择
ISO C11标准 (/std:c11)或ISO C17标准 (/std:c17)即可
命令行编译配置
直接在编译参数中添加/std:c11或/std:c17即可。
方案2:将隐式函数声明警告升级为错误(兼容C89场景)
如果必须保留C89兼容的编译模式,可以单独将对应警告升级为错误:
MSVC中对应「调用未声明函数」的警告编号为C4013,默认仅输出警告,将其设置为编译错误即可触发直接报错:
Visual Studio IDE配置步骤
- 右键项目打开「属性」面板
- 依次展开「配置属性 -> C/C++ -> 高级」
- 在「将特定警告视为错误」输入框中添加
4013即可
命令行编译配置
直接在编译参数中添加/we4013即可。
配置完成后,当遗漏#include <assert.h>这类头文件时,编译器会直接抛出函数未声明的错误,直接定位到根因,不会再继续编译输出后续无意义的错误信息。
内容的提问来源于stack exchange,提问作者Izzo
相关产品推荐
相关产品推荐

