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