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

Can MSVC be configured to throw a compiler error when it runs into an undeclared function?

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

int assert()

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

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

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

MSVC 编译器将在使用未声明的函数时发出 警告 消息(如果 project/file 的警告级别设置为 /W3 或更高).在你的情况下(使用 assert 而没有 #include <assert.h>),该消息将是:

warning C4013: 'assert' undefined; assuming extern returning int

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

用下面一行:

#pragma warning(error:4013)

以上警告变为:

error C4013: 'assert' undefined; assuming extern returning int

... 并且项目将无法构建。

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