源代码语言 (-lang)
指定源文件的语言
描述
指定源文件的语言。在指定其他配置选项之前,请先选择此选项,因为其他选项会根据您选择的语言而改变。此选项同时适用于动态测试和静态分析。
源代码语言会在您将源文件添加到工程后自动确定。
| 添加的文件 | 源代码语言 |
|---|---|
仅限具有扩展名 .c 的文件 | 如果工程语言未更改(仍为默认值)或者之前已设置为 C,则为 C;否则为 C-CPP |
仅限具有扩展名 .cpp 或 .cc 的文件 | 如果工程语言之前已设置为 CPP,则为 CPP;否则为 C-CPP |
具有扩展名 .c、.cpp 和 .cc 的文件 | C-CPP |
设置
- C
如果您的工程仅包含 C 文件,请选择此设置。此值将验证范围限制为 C 语言约定。所有文件都将被解释为 C 文件,无论其文件扩展名如何。
- CPP
如果您的工程仅包含 C++ 文件,请选择此设置。此值将验证范围限制为 C++ 语言约定。所有文件都将被解释为 C++ 文件,无论其文件扩展名如何。
- C-CPP
如果您的工程包含 C 和 C++ 源文件,请选择此设置。此值允许使用 C 和 C++ 语言约定。
.c文件都将被解释为 C 文件。其他文件扩展名将被解释为 C++ 文件。
依赖关系
语言选项会启用并禁用许多相关选项和选项值。一些选项会根据您选择的语言而改变。有关详细信息,请参阅各个分析选项页。
如果您使用
polyspace-configure命令或polyspaceConfigure函数从编译系统创建 Polyspace® 工程或选项文件,则此选项的值将通过文件扩展名来确定。对于同时包含
.c和.cpp文件的工程,请使用语言选项 C-CPP。在分析过程中,每个文件将根据文件扩展名确定的语言标准进行编译。在编译后,Polyspace 将此类混合工程作为 C++ 工程进行验证。
提示
源文件编译
对于同时包含 C 和 C++ 文件的工程,如果您使用 C-CPP 语言,则每个文件将根据文件扩展名确定的语言标准进行编译。在编译后,Polyspace 将此类混合工程作为 C++ 工程进行验证。
具体来说,分析会将所有文件作为 C++ 文件进行链接。由于 C 和 C++ 在链接行为上存在差异,当混合 C-C++ 工程中的 C 文件使用 C-CPP 语言进行编译时,与使用 C 语言进行编译相比,您可能会发现在链接错误或警告方面存在差异。
源文件链接
C 和 C++ 编译器在假设方面存在一些差异。例如,对于 C 编译器,enum 的基础类型是 int。然而,对于 C++ 编译器,enum 的基础类型是由实现定义的。当使用 C-CPP 作为语言时,C 和 C++ 编译器的差异假设可能会导致分析失败。
测试生成
如果您使用源代码语言设置为 C-CPP 的工程配置生成测试,则测试将以 C++ 文件形式生成,并使用 C++ 编译规则进行编译。
需要特别说明的是,如果您的源代码包含在 C++ 中属于保留关键字的标识符名称,则即使源文件是 C 文件,在 C-CPP 模式下生成的测试也会是 C++ 文件形式并且可能会编译失败。
命令行信息
参数:-lang |
值:c | cpp| c-cpp |
示例 (Bug Finder):polyspace-bug-finder -lang c-cpp -sources |
示例 (Code Prover):polyspace-code-prover -lang cpp -sources |
示例 (Bug Finder Server):polyspace-bug-finder-server -lang c-cpp -sources |
示例 (Code Prover Server):polyspace-code-prover-server -lang cpp -sources |
示例 (Bug Finder):polyspace-bug-finder -lang c -sources |
示例 (Code Prover):polyspace-code-prover -lang c -sources |
示例 (Bug Finder Server):polyspace-bug-finder-server -lang c -sources |
示例 (Code Prover Server):polyspace-code-prover-server -lang c -sources |