ISO/IEC 9899:2011 条款5——5.2.4 环境限制

5.2.4 环境限制

1、翻译与执行环境都约束了语言翻译器和库的实现。下面概述了对一个顺应标准实现的语言相关的环境限制;库相关的限制在条款7中讨论。

5.2.4.1 翻译限制

1、实现应该能够翻译并执行至少一个程序,该程序包含以下每个限制的至少一个实例:[注:实现应该尽量避免强加使用固定的翻译限制。]

—— 127个语句块的嵌套层级

—— 63个带条件的包含嵌套层级

—— 12个指针、数组与函数声明符(以任意结合)在一个声明中用于修饰一个算术、结构体、联合体或void类型。

—— 63个圆括号包围的声明符的嵌套层级,在一个完整的声明符内

—— 63个圆括号包围的表达式的嵌套层级,在一个完整的表达式内

—— 63个有效初始字符,在一个内部标识符或一个宏名中(每个通用字符名或扩展源字符被认作为一单个字符)

—— 31个有效初始字符,在一个外部标识符中(每个通用字符名指定了一个0000FFFF或更小的short类型标识符,被认作为6个字符,每个通用字符名指定了00010000或更大的short类型标识符被认作为10个字符,并且每个扩展源字符被认作为与相应的通用字符名相同的字符个数,如果存在的话)[注:见6.11.3]

—— 4095个外部标识符,一个翻译单元中

时间: 2024-10-09 00:39:02

ISO/IEC 9899:2011 条款5——5.2.4 环境限制的相关文章

ISO/IEC 9899:2011 条款6.4.3——通用字符名

6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad: hexadecimal-digit    hexadecimal-digit    hexadecimal-digit    hexadecimal-digit 约束 2.一个通用字符名不应该指定一个字符,其短标识符比00A0要小,除了0024($),0040(@),0060(`)之外,也不应该

ISO/IEC 9899:2011 条款6.5.1——基本表达式

6.5.1 基本表达式 语法 1.primary-expression: identifier constant string-literal (    expression    ) generic-selection 语义 2.一个标识符是一个基本表达式,提供为,它作为指派一个对象(在这种情况下,它是一个左值)或一个函数(在这种情况下,它是一个函数指派符)而被声明.[注:从而,一个未声明的标识符是对此语法的违反.][译者注:比如: int a = 10; a; // 这是一个基本表达式 ]

ISO/IEC 9899:2011 条款5——5.2.1 字符集

5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出,以及一组零个或多个区域特定的成员(这些不是基本字符集的成员),称为扩展字符.这些成员结合起来也被称为扩展字符集.执行字符集的成员的值是由实现定义的.

ISO/IEC 9899:2011 条款6——语言

6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中列出可替换的定义,除了当用单词“之一”开头时.一个可选的符号用下标“opt”来指示,这样 { expressionopt } 指示一个在大括号中包裹的可选的表达式. 2.当在文本中引用了语义类别时,它们不用斜体标明并且单词用空格而不是连接号(-)来分隔. 3.在附录A中给出了语言语法的概述. 6.2

ISO/IEC 9899:2011 条款6.5——表达式

6.5 表达式 1.一个表达式是操作符与操作数的一个序列,这些操作符与操作数指定了一个值的计算,或指派一个对象或一个函数,或是生成副作用,或执行上述操作的组合.对一个操作符的操作数的值计算顺序排在对该操作符的结果的值计算之前.[译者注:比如 int a = (100 + 5) * (20 - 6); 对于上述表达式,就对于当中的 * 操作符而言,先计算乘法操作符左右两边的操作数的计算,最后再计算乘法操作结果. ] 2.如果在一个标量对象上的副作用相对于同一标量对象上的另一个不同副作用或是使用同一

ISO/IEC 9899:2011 条款6.7.1——存储类说明符

6.7.1 存储类说明符 语法 1.storage-class-specifier: typedef extern static _Thread_local auto register 约束 2.在一个声明中,在声明说明符中最多只能给出一个存储类说明符,除了_Thread_local可以与static或extern一起出现.[注:见“未来语言方向”(6.11.5)] 3.在含有语句块作用域的一个对象的声明中,如果声明说明符包含了_Thread_local,那么它们应该也包含static或是ext

ISO/IEC 9899:2011 条款6.2.3——标识符的名字空间

6.2.3 标识符的名字空间 1.如果一个特定标识符的多个声明在一个翻译单元的任意一点可见,那么语法上下文会区分对不同实体的引用.从而,对于标识符各种不同的类别具有独立的名字空间: ——标签名(通过标签声明和使用的语法进行区分): ——结构体.联合体以及枚举的类型名(通过关键字struct.union或enum进行区分): ——结构体或联合体的成员:每个结构体或联合体为其成员具有一个独立的名字空间(通过用于访问成员的.或是->操作符的表达式类型进行区分): ——所有其它标识符称为普通标识符(声明

ISO/IEC 9899:2011 条款4——顺应

4. 顺应 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为是未定义的.否则,未定义行为在本国际标准中通过“未定义行为”这一短语或通过对任一显式定义的行为的缺省进行指定.在这三种表达方式之中没有特别的重点强调:它们都描述了“未定义的行为”. 3.在所有其它方面都正确的一个程序且操作正确的数据,却含有未指定的行为,那么应该是一个正确的程序并且其行为符号5.1.2.

ISO/IEC 9899:2011 条款6.10.3——宏替换

6.10.3 宏替换 约束 1.两个替换列表是相同的,当且仅当两个替换列表中的预处理符记都具有相同的数.次序.拼写,以及空白分隔符,这里所有的空白分隔符都认为是相同的. 2.当前被定义为一个类似对象的宏的标识符不应该被另一个#define预处理指示符重新定义,除非第二个定义是一个类似对象的宏定义,并且两个替换列表完全相同.类似的,当前被定义为类似函数的宏的标识符不应该用另一个#define预处理指示符重新定义,除非第二个定义是一个类似函数的宏定义,且具有相同个数的形参和拼写,以及两个替换列表完全