问题描述
我目前正在使用 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"
(或等效)命令行开关。