预处理器定义 (-D)
替换预处理代码中的宏
描述
在预处理代码中用宏定义替换宏。
为何使用此选项
使用此选项来模拟您的编译器行为。例如,如果您的编译器认为在构建代码时已定义宏 _WIN32,则它会在 #ifdef _WIN32 语句中执行代码。如果 Polyspace® 认为该宏未被定义,则必须使用此选项将宏替换为 1。
根据您对编译器 (-compiler) 的设置,系统会默认定义一些宏。使用此选项定义未隐式定义的宏。
通常,您可以从编译错误中识别出某个宏未定义。例如,如果未定义宏 _WIN32,则以下代码不会编译。
#ifdef _WIN32
int env_var;
#endif
void set() {
env_var=1;
}env_var。但是,env_var 的定义位于 #ifdef _WIN32 语句中。错误的根本原因是未定义宏 _WIN32。您必须定义 _WIN32。设置
无默认值
使用
按钮为要定义的宏添加一行。定义的格式必须为 。如果您希望 Polyspace 忽略宏,请将 Macro=Value 留空。Value
例如:
name1=name2用name2替换name1的所有实例。name=指示软件忽略name。不带等号或值的
name用 1 替换name的所有实例。要定义宏以执行#ifdef语句中的代码,请使用此语法。macro_name
提示
如果 Polyspace 不支持非 ANSI® 关键字并显示编译错误,请使用此选项将预处理代码中出现的所有该关键字替换为空字符串。仅出于分析目的进行替换。您的原始源代码保持不变。
例如,如果您的编译器支持
__far关键字,为避免编译错误,请执行以下操作:在用户界面(仅限桌面端产品)中,输入
__far=。在命令行中,使用
-D __far=标志。
软件在预处理期间将
__far关键字替换为空字符串。例如:将转换为:int __far* pValue;
int * pValue;
Polyspace 可识别
restrict等关键字,但不允许将其用作标识符。如果您将这些关键字用作标识符(因为编译器不会将其识别为关键字),请使用此选项将不允许的名称替换为其他名称。仅出于分析目的进行替换。您的原始源代码保持不变。例如,要允许将
restrict用作标识符,请执行以下操作:在用户界面中,输入
restrict=my_restrict。在命令行中,使用
-D restrict=my_restrict标志。
您的编译器设定决定了许多编译器特定的宏的值。如果要了解 Polyspace 如何定义特定宏,请使用
-dump-preprocessing-info选项。要覆盖来自编译器设定的宏定义,请使用此选项。
要取消定义某个宏,请使用
已禁用的预处理器定义 (-U)选项。
命令行信息
您只能为每个 -D 选项指定一个标志。但您可以多次指定该选项。
参数:-D |
| 无默认值 |
值: |
示例 (Bug Finder):polyspace-bug-finder -D HAVE_MYLIB -D int32_t=int |
示例 (Code Prover):polyspace-code-prover -D HAVE_MYLIB -D int32_t=int |
示例 (Bug Finder Server):polyspace-bug-finder-server -D HAVE_MYLIB -D int32_t=int |
示例 (Code Prover Server):polyspace-code-prover-server -D HAVE_MYLIB -D int32_t=int |