主要内容

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

MISRA C:2012 Rule 1.1

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

描述

规则定义

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

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

控制流语句(如 ifwhile 等)的嵌套深度超过了标准中规定的限制。

允许的最大嵌套深度:

  • 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 类别:必需

版本历史记录

在 R2014b 中推出

全部展开


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++:2008

  • MISRA C++:2023

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