是否可以将 MSVC 配置为在遇到未声明的函数时抛出编译器错误?

问题描述

我目前正在使用 MSVC 和 Visual Studio。如果编译器遇到一个未声明的函数,它会自动采用它的形式。例如,如果我忘记 #include <assert.h>,它将采用以下形式:

int assert()

然后编译器继续编译并输出很多“无意义的”错误。这使得很难追踪实际问题(即缺少 #include)。

是否可以将编译器配置为在遇到未声明的函数时抛出错误

注意,我在“C”模式下使用 MSVC,其中我的源文件扩展名为“.c”而不是“.cpp”。

解决方法

MSVC 编译器在使用未声明的函数时会发出警告消息(如果项目/文件的警告级别设置为 /W3 或更高)。在您的情况下(使用 assert 而不使用 #include <assert.h>),该消息将是:

警告 C4013:'assert' 未定义;假设 extern 返回 int

但是,如果您希望编译器为此类事件生成错误,您可以:(a) 将“将警告视为错误”设置为“是”(/WX) “属性→C/C++→通用”;或 (b) 仅将特定警告转换为错误,请在相关源文件中使用 #pragma warning(error:nnnn) 指令。

使用以下行:

#pragma warning(error:4013)

以上警告变为:

错误 C4013:'assert' 未定义;假设 extern 返回 int

... 项目将无法构建。

您也可以在“属性 → C/C++ → 高级”中完成后者(仅将特定警告视为错误)并指定相关警告编号的分号分隔列表,或通过添加 /we"4013" (或等效)命令行开关。