主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

C 标准版本 (-c-version)

指定源代码中遵循的 C 语言标准。

描述

请在源代码中指定您所遵循的 C 语言标准。此选项适用于动态测试和静态分析。

设置选项

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

  • Polyspace® 用户界面(仅限桌面端产品):在您的工程配置中,选择目标和编译器节点,然后为此选项选择一个值。有关您必须先启用的其他选项,请参阅依赖关系

  • Polyspace 平台用户界面(仅限桌面端产品):在工程配置中,在编译选项卡上,选择目标和编译器节点,然后为该选项选择一个值。有关您必须先启用的其他选项,请参阅依赖关系

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

为何使用此选项

使用此选项,以便 Polyspace 在编译时允许 C 标准版本特有的功能。例如,如果您使用 GCC 并使用标记 -ansi-std=c90 进行编译,则为此选项指定 c90。如果您不确定语言标准,请指定 defined-by-compiler

例如,假设您在代码中使用了布尔数据类型 _Bool。此类型在 C99 标准中定义,但在之前的标准(如 C90)中未被提及。如果 Polyspace 编译遵循 C90 标准,您会看到编译错误。

某些 MISRA C™ 规则会根据您使用的是 C90 还是 C99 标准而有所不同。例如,MISRA C C:2012 规则 5.2 规定,同一作用域和名称空间中的标识符必须是唯一的。如果您使用 C90 标准,则前 31 个字符相同的不同标识符违反了此规则。如果使用 C99 标准,字符数将增加到 63 个。

设置

默认值: defined-by-compiler

defined-by-compiler

该分析基于您对编译器 (-compiler) 的规格定义。

请参阅C/C++ Language Standard Used in Polyspace Analysis

c90

该分析使用 ISO®/IEC 9899:1990 标准,非正式地称为 C90 标准。Polyspace 允许使用 C99 关键字 inline,其值为 c90

c99

该分析使用的是 ISO/IEC 9899:1999 标准,非正式地称为 C99 标准。

c11

该分析使用的是 ISO/IEC 9899:2011 标准,非正式地称为 C11 标准。

另请参阅C11 Language Elements Supported in Polyspace

c17

分析使用的是 ISO/IEC 9899:2018 标准,非正式地称为 C17 或 C18 标准。

本版本修复了 C11 标准中的缺陷,但未引入新的语言特性。__STDC_VERSION__ 宏的值增加到 201710L

依赖关系

  • 仅在您将Source code language (-lang) 设置为 CC-CPP 时,此选项才可用。

  • 如果您使用 polyspace-configure 命令或 polyspaceConfigure 函数从编译系统创建工程或选项文件,则此选项的值将自动从编译系统确定。

    如果编译系统对不同的文件使用不同的标准,后续的 Polyspace 分析可以模拟您的编译系统,对这些文件使用不同的标准进行编译。如果您在 Polyspace 用户界面中打开此类工程,则选项值将显示为 defined-by-compiler。但是,Polyspace 没有使用一个标准,而是使用隐藏选项 -options-for-sources 将不同的标准与不同的文件关联起来。

命令行信息

参数:-c-version
值:defined-by-compiler | c90 | c99 | c11 | c17
默认值:defined-by-compiler
示例 (Bug Finder):polyspace-bug-finder -lang c -sources "file1.c,file2.c" -c-version c90
示例 (Code Prover):polyspace-code-prover -lang c -sources "file1.c,file2.c" -c-version c90
示例 (Bug Finder Server):polyspace-bug-finder-server -lang c -sources "file1.c,file2.c" -c-version c90
示例 (Code Prover Server):polyspace-code-prover-server -lang c -sources "file1.c,file2.c" -c-version c90