已禁用的预处理器定义 (-U
)
取消定义预处理代码中的宏
描述
取消定义预处理代码中的宏。
为何使用此选项
使用此选项来模拟您的编译器行为。例如,您的编译器可能会认为宏 _WIN32
未定义,并执行 #ifndef _WIN32
模块中的代码。若要在运行 Polyspace® 分析时模拟此行为,请使用此选项将 _WIN32
指定为未定义。
此选项会取消定义以下宏:
您使用
-D
选项定义的宏。请参阅预处理器定义 (-D)
。编译器可能隐式定义的宏。
Polyspace 默认启用的用来模拟编译器行为的宏。请参阅
编译器 (-compiler)
。
如果您在源代码中使用 #define
语句定义某个宏,则此选项无法将其取消定义。
通常,您可以从编译错误中识别出某个宏必须取消定义。例如,如果定义了宏 _WIN32
,则以下代码不会编译。
#ifndef _WIN32 int env_var; #endif void set() { env_var=1; }
env_var
。但是,env_var
的定义位于 #ifndef _WIN32
语句中。错误的根本原因是定义了宏 _WIN32
。您必须取消定义 _WIN32
。设置
无默认值
使用 按钮为要取消定义的每个宏添加一个新行。
提示
您的编译器设定决定了许多编译器特定的宏的值。如果要了解 Polyspace 如何定义特定宏,请使用 -dump-preprocessing-info
选项。
要覆盖来自编译器设定的宏定义,请使用
预处理器定义 (-D)
选项。要取消定义宏,请使用此选项。
在编译过程中,文件特定的 undefine 项将与工程级编译配置合并。将此选项与基于 CMAKE 的工具链一起使用会产生警告。
命令行信息
您只能为每个 -U
选项指定一个标志。但您可以多次指定该选项。
参数:-U |
无默认值 |
值:macro |
示例 (Bug Finder):polyspace-bug-finder -U HAVE_MYLIB -U USE_COM1 |
示例 (Code Prover):polyspace-code-prover -U HAVE_MYLIB -U USE_COM1 |
示例 (Bug Finder Server):polyspace-bug-finder-server -U HAVE_MYLIB -U USE_COM1 |
示例 (Code Prover Server):polyspace-code-prover-server -U HAVE_MYLIB -U USE_COM1 |