主要内容

源代码语言 (-lang)

指定源文件的语言

描述

指定源文件的语言。在指定其他配置选项之前,请先选择此选项,因为其他选项会根据您选择的语言而改变。此选项同时适用于动态测试和静态分析。

源代码语言会在您将源文件添加到工程后自动确定。

添加的文件源代码语言
仅限具有扩展名 .c 的文件如果工程语言未更改(仍为默认值)或者之前已设置为 C,则为 C;否则为 C-CPP
仅限具有扩展名 .cpp.cc 的文件如果工程语言之前已设置为 CPP,则为 CPP;否则为 C-CPP
具有扩展名 .c.cpp.cc 的文件C-CPP

设置选项

使用以下方法之一设置选项:

  • Polyspace 平台用户界面(仅限桌面端产品):在您的工程配置中,在编译选项卡上选择目标和编译器节点,然后为此选项选择一个值。

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

设置

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 "file1.c,file2.cpp"
示例 (Code Prover):polyspace-code-prover -lang cpp -sources "file1.cpp,file2.cpp"
示例 (Bug Finder Server):polyspace-bug-finder-server -lang c-cpp -sources "file1.c,file2.cpp"
示例 (Code Prover Server):polyspace-code-prover-server -lang cpp -sources "file1.cpp,file2.cpp"
示例 (Bug Finder):polyspace-bug-finder -lang c -sources "file1.c,file2.c"
示例 (Code Prover):polyspace-code-prover -lang c -sources "file1.c,file2.c"
示例 (Bug Finder Server):polyspace-bug-finder-server -lang c -sources "file1.c,file2.c"
示例 (Code Prover Server):polyspace-code-prover-server -lang c -sources "file1.c,file2.c"