主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

已禁用的预处理器定义 (-U)

取消定义预处理代码中的宏

描述

取消定义预处理代码中的宏。

设置选项

用户界面(仅限桌面端产品):在您的工程配置中,此选项位于节点上。

用户界面(仅限 Polyspace 平台、桌面端产品):在您的工程配置中,此选项位于目标和编译器节点的编译选项卡中。

命令行选项文件:请使用 -U 选项。请参阅命令行信息

为何使用此选项

使用此选项来模拟您的编译器行为。例如,您的编译器可能会认为宏 _WIN32 未定义,并执行 #ifndef _WIN32 模块中的代码。若要在运行 Polyspace® 分析时模拟此行为,请使用此选项将 _WIN32 指定为未定义。

此选项会取消定义以下宏:

如果您在源代码中使用 #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