6.9.1 函数定义 语法 1.function-definition: declaration-specifiers    declarator    declaration-listopt    compound-statement declaration-list: declaration declaration-list    declaration 约束 2.在一个函数定义中所声明的标识符(它是函数名)应该是一个函数类型,它通过函数定义的声明符部分指定.[注:这样的目的是在一个函数定义…
6.7.8 类型定义 语法 1.typedef-name: identifier 约束 2.一个typedef名指定了一个可变修改的类型,然后它应该具有语句块作用域. 语义 3.在一个声明中,该声明的存储类说明符是typedef,每个声明符定义了一个要作为typedef名的标识符,表示了该标识符所指定的类型,如6.7.6中所描述的.任一与可变长数组声明符相关联的数组大小表达式,在每次以执行次序碰到typedef名的声明时都被计算一次.一个typedef声明并不引入一个新的类型,仅仅是所指定类型的…
6.7.4 函数说明符 语法 1.function-specifier: inline _Noreturn 约束 2.函数说明符应该只能被用在对一个函数标识符的声明中. 3.对一个含有外部连接函数的内联定义,不应该包含含有静态或线程存储周期的可修改对象的定义,并且不应该含有对带有内部连接的一个标识符的引用.[译者注:比如 ; extern inline void hello(int a); inline void hello(int a) { static int s; // 不应该定义可修改的…
3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用.在本国际标准中没被定义的术语将根据ISO/IEC 2382-1进行解释.在本国际标准中没被定义的数学符号将根据ISO 31-11中进行解释. 3.1 访问 1.<运行时行为>读或修改一个对象的值 2.注1:这里,这两个行为中同时只有一个发生,要么“读”,要么“修改”被使用. 3.注2:“修改”包括…
5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出,以及一组零个或多个区域特定的成员(这些不是基本字符集的成员),称为扩展字符.这些成员结合起来也被称为扩展字符集.执行字符集的成员的值是由实现定义的. 2.在一个字符常量或字符串字面量中,执行字符集的成员应该由相应的源字符集的成员或通过由倒斜杠\后面跟一到多个字符所构成的转义序列来表示.所以比特均为…
6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier    identifier-nondigit identifier    digit identifier-nondigit: nondigit         universal-character-name other implementation-defined characters nondigit:以下字符之一 _    a到z    A到Z digi…
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(`)之外,也不应该…
6.7.6 声明符 语法 1.declarator: pointeropt    direct-declarator direct-declarator: identifier (    declarator    ) direct-declarator    [ type-qualifier-listopt    assignment-expressionopt    ] direct-declarator    [ static    type-qualifier-listopt    as…
6.7.3 类型限定符 语法 1.type-qualifier: const restrict volatile _Atomic 约束 2.除了指针类型(其被引用的类型是一个对象类型)之外的类型,不应该被restrict限定. 3.被_Atomic修饰的类型不应该是一个数组类型或一个函数类型. 语义 4.与限定类型相关联的属性仅对作为左值的表达式有意义.[注:实现可以将一个非volatile的一个const对象放置到一个只读存储区域.此外,实现不需要为这么一个对象分配存储空间,如果其地址永远不被…
5.2.4 环境限制 1.翻译与执行环境都约束了语言翻译器和库的实现.下面概述了对一个顺应标准实现的语言相关的环境限制:库相关的限制在条款7中讨论. 5.2.4.1 翻译限制 1.实现应该能够翻译并执行至少一个程序,该程序包含以下每个限制的至少一个实例:[注:实现应该尽量避免强加使用固定的翻译限制.] —— 127个语句块的嵌套层级 —— 63个带条件的包含嵌套层级 —— 12个指针.数组与函数声明符(以任意结合)在一个声明中用于修饰一个算术.结构体.联合体或void类型. —— 63个圆括号包…