内联 (-inline
)
指定必须要为对其的每次调用在内部创建克隆的函数
描述
此选项仅影响 Polyspace® Code Prover™ 分析。
指定验证操作必须要为对其的每次调用在内部创建克隆的函数。
设置选项
用户界面(仅限在桌面端产品中):在您的工程配置中,-inline
选项位于缩放节点上。
用户界面(仅限 Polyspace 平台、桌面端产品):在您的工程配置中,此选项位于运行时错误 > 精确度节点的静态分析选项卡上。
为何使用此选项
使用 -inline
可以在函数调用时,在内部对此函数创建克隆。这样做可能会降低 Polyspace Code Prover 的分析复杂度。请参考以下代码:
void foo(int* p); void bar(){ int* intP, intP2; foo(intP); foo(intP2) }
foo()
和 bar()
。未指定 -inline
选项时,分析操作将跟踪三个对象:指针 intP
、intP2
和参数 p
。如果指定了 -inline
选项,则 Polyspace 会在每个函数调用时在内部克隆 foo
。代码实际上变为:void foo_clone1(int* p); void foo_clone2(int* p); void bar(){ int* intP, intP2; foo_clone1(intP); foo_clone2(intP2) }
foo_clone1()
函数仅需要 Polyspace 跟踪 intP
和 p
这两个对象而不是三个对象。对于函数 foo_clone2()
也是如此。通过使用 -inline
,您降低了分析复杂度并增加了要分析的代码量。使用 -inline
可能会降低分析复杂度,同时也会增加要分析的代码量。此选项可能有助于解决特定情况下的规模问题。对于某些函数,技术支持可能会要求您使用此选项。使用此选项会更改 Polyspace Code Prover 检查结果的颜色的含义。请参阅设置。
请避免使用此选项来区分对同一函数的不同调用中 Code Prover 检查结果的颜色。应该改用敏感度上下文 (-context-sensitivity)
选项。
设置
无默认值
输入函数名称或从列表中进行选择。
点击
可添加一个字段并输入函数名称。
点击
可列出代码中的函数。从列表中选择函数。
验证操作会在每个调用时在内部克隆该函数。例如,如果您指定将函数 func
内联并两次调用 func
,则软件会在内部创建 func
的两个副本用于验证。
不过,对于函数体中的每个运行时检查,您在验证结果中只会看到一种颜色。检查结果颜色的语义与正常指定时的语义不同。
检查类型 | 不使用 -inline 选项时的结果颜色 | 使用 -inline 选项时的结果颜色 |
---|---|---|
橙色检查 | 如果一个函数被调用两次,并且某个运算在其中一次调用中导致了确定的错误,则检查颜色为橙色。 | 如果一个函数被调用两次,并且某个运算在其中一次调用中导致了确定的错误,则检查颜色为暗橙色。此检查在结果列表中显示有一个橙色感叹号。 |
灰色检查 | 如果一个函数被调用两次,并且 if 语句分支在其中一次调用中不可达,则该分支不会显示为灰色。 | 如果一个函数被调用两次,并且 if 语句分支在其中一次调用中不可达,则该分支会显示为灰色。 |
在每一项对内联函数的检查的下方,可以看到特定于每个调用上下文的信息。例如,如果一个特定的函数调用导致了明确的除以零错误,一个橙色感叹号会出现在除以零的旁边,您可以识别该调用以及该调用产生的值。
不要使用此选项来理解结果。仅当某个函数导致规模问题时才使用此选项。
提示
根据别名验证提供的提示选择要内联的函数。
不要将此选项用于入口函数,包括
main
。使用此选项会增加灰色检查不可达代码的数量。
例如,在下面的代码中,如果您为内联输入
max
,则会为对max
的每个调用显示两个不可达代码检查。int max(int a, int b) { return a > b ? a : b; } void main() { int i=3, j=1, k; k=max(i,j); i=0; k=max(i,j); }
如果您在函数定义前使用关键字
inline
,将定义放入头文件中并从多个源文件调用该函数,则结果与使用内联选项时相同。对于 C++ 代码,此选项适用于某个类的所有重载的方法。
命令行信息
参数:-inline |
值:
|
无默认值 |
示例 (Code Prover):polyspace-code-prover -sources |
示例 (Code Prover Server):polyspace-code-prover-server -sources |