C语言编码规范 MISRA-C:2004
环境
规则1.1(强制) : 所有代码都必须遵照 ISO 9899:1990 “Programming languages - C”,由 ISO/IEC 9899/COR1:1995,ISO/IEC 9899/AMD1:1995,和 ISO/IEC 9899/COR2:1996 修订。
规则1.2(强制): 不能有对未定义行为或未指定行为的依赖性。
规则1.3(强制): 多个编译器和/或语言只能在为语言/编译器/汇编器所适合的目标代码定义了通用接口标准时使用。
规则 1.4(强制): 编译器/链接器要确保 31 个有效字符和大小写敏感能被外部标识符支持。
规则 1.5(建议): 浮点应用应该适应于已定义的浮点标准。
语言扩展
规则 2.1(强制): 汇编语言应该被封装并隔离。
规则 2.2(强制): 源代码应该使用 /…/ 类型的注释。
规则 2.3(强制): 字符序列 /* 不应出现在注释中。
《 C 不支持注释的嵌套,尽管一些编译器支持它以做为语言扩展。一段注释以/开头,直到第一个/为止,在这当中出现的任何/*都违反了本规则。》
规则 2.4(建议): 代码段不应被“注释掉”(comment out)。
当源代码段不需要被编译时,应该使用条件编译来完成(如带有注释的#if 或#ifdef 结构)。为这种目的使用注释的开始和结束标记是危险的,因为 C 不支持嵌套的注释,而且已经存在于代码段中的任何注释将影响执行的结果。
文档
规则 3.1(强制): 所有实现定义(implementation-defined)的行为的使用都应该文档化。
规则 3.2(强制): 字符集和相应的编码应该文档化。
规则 3.3(建议): 应该确定、文档化和重视所选编译器中整数除法的实现。
规则 3.4(强制): 所有#pragma 指令的使用应该文档化并给出良好解释。
规则 3.5(强制): 如果做为其他特性的支撑,实现定义(implementation-defined)的行为和位域(bitfields)集合应当文档化。
规则 3.6(强制): 产品代码中使用的所有库都要适应本文档给出的要求,并且要经过适当的验证。
字符集
规则 4.1(强制): 只能使用 ISO C 标准中定义的 escape 序列。
规则 4.2(强制): 不能使用三字母词(trigraphs)。
标识符
规则 5.1(强制): 标识符(内部的和外部的)的有效字符不能多于 31。
规则 5.2(强制): 具有内部作用域的标识符不应使用与具有外部作用域的标识符相同的名称,这会隐藏了外部标识符。
规则 5.3(强制): typedef 的名字应当是唯一的标识符。
规则 5.4(强制): 标签(tag)名称必须是唯一的标识符。
规则 5.5(建议): 具有静态存储期的对象或函数标识符不能重用。
规则 5.6(建议): 一个命名空间中不应存在与另外一个命名空间中的标识符拼写相同的标识符,除了结构和联合中的成员名字。
规则 5.7(建议): 不能重用标识符名字。
类型
规则 6.1(强制): 单纯的 char 类型应该只用做存储和使用字符值。