主要内容

MISRA C:2023 Rule 1.1

R2026b

The program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation's translation limits

自 R2024a 起

描述

The program shall contain no violations of the standard C syntax and constraints, and shall not exceed the implementation's translation limits 1 .

Polyspace 实现

规则检查项会检查以下问题。请注意:

问题C 标准依赖其他信息
整数常量超出 long int(如果该常量有符号)或 unsigned long int(如果该常量无符号)的范围。仅针对 C90 进行检查。规则检查项使用对 long int 变量大小的规范(通常为 32 位)来进行检查。另请参阅目标处理器类型 (-target)。
使用了大小为零的数组。仅针对 C90 进行检查。 
翻译单元中定义的宏数量超出标准中指定的限制。

允许的宏定义数:

  • C90:1024

  • C99 及更高版本:4095

翻译单元由源文件以及直接或间接包含的头文件组成。这些文件是在编译期间创建最小目标文件所必需的。规则检查项要求源文件及其包含的头文件中的宏数量不得超过标准中指定的限制。

控制流语句(如 if、while 等)的嵌套深度超出标准中指定的限制。

允许的最大嵌套深度:

  • C90:15

  • C99 及更高版本:127

 
使用包含文件的包含层级数超出标准中指定的限制。

允许的最大包含层级数:

  • C90:8

  • C99 及更高版本:15

 
结构体或联合体的成员数超出标准中指定的限制。

结构体或联合体中的最大成员数:

  • C90:127

  • C99 及更高版本:1023

 
结构体中的嵌套层数超出标准中指定的限制。

最大嵌套深度:

  • C90:15

  • C99 及更高版本:63

 
单个枚举中的常量数超出标准中指定的限制。

允许的最大枚举常量数:

  • C90:127

  • C99 及更高版本:1023

 
使用了汇编语言语句。所有 C 标准都检查。 
使用了非标准预处理器指令。所有 C 标准都检查。规则检查项会标记在 C 标准中未出现的预处理器指令(例如 #ident、#alias 和 #assert)的使用。
预处理器指令后跟有无法识别的文本。所有 C 标准都检查。

规则检查项会标记预处理器指令(以 # 开头的行)后面的多余文本。例如:

#include <header> code

使用了未命名的联合体或空 structs。仅对 C90 进行检查。 
enum 包含尾随逗号。仅对 C90 进行检查。 

标准的编译错误消息不会导致违反此 MISRA™ 规则。

提示

要对由相同原因产生的所有结果进行批量申述,请使用结果列表窗格中的详细信息列。点击列标题,以便将具有相同条目的所有结果分组在一起。在按住 Shift 键的同时依次选择第一个结果和最后一个结果。为其中一个结果指定一个状态。如果您未看到详细信息列,请右键点击任何其他列标题并启用此列。

故障排除

如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示。

示例

全部展开

#include <stdio.h>
#ident "@(#) Hello World"// Noncompliant 
extern int func(void);

void foo(void){
	int n = 2;
	asm ("leal (%0,%0,4),%0"
         : "=r" (n)
         : "0" (n));
    
 
    // standard inline assembly
    asm ("movq $60, %rax\n\t" 
         "movq $2,  %rdi\n\t" 
         "syscall");
}

翻译单元使用了非标准预处理器指令 #ident。Polyspace® 标记了非标准语法。

检查信息

组:标准 C 环境
类别:必需
AGC 类别:必需
PQL 名称:std.misra_c_2023.R1_1

版本历史记录

在 R2024a 中推出

全部展开


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C:2025

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.