问题标签 [rationale]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - “具有柔性阵列成员的结构不应成为结构的成员”的基本原理是什么?
C11,6.7.2.1 结构和联合说明符,约束,3(强调添加):
结构或联合不应包含不完整或函数类型的成员(因此,结构不应包含自身的实例,但可能包含指向自身实例的指针),除非结构的最后一个成员具有超过一个命名成员可能有不完整的数组类型;这样的结构(以及任何可能递归地包含此类结构的成员的联合)不应是结构的成员或数组的元素。
C 的基本原理,修订版 5.10,2003 年 4 月(强调添加):
同样,包含灵活数组的结构不能出现在其他结构或数组中。
因此,C 的基本原理并没有提供基本原理。理由是什么?
c - 为什么一元 * 运算符没有约束“操作数不应是指向 void 的指针”?
C2x,6.5.3.2 地址和间接运算符,约束,2:
一元 * 运算符的操作数应具有指针类型。
为什么没有约束“操作数不应是指向void
”的指针?
虽然可以推导出来:
C2x,6.5.3.2 地址和间接运算符,语义,4:
一元 * 运算符表示间接。如果操作数指向一个函数,则结果是一个函数指示符;如果它指向一个对象,则结果是一个指定该对象的左值。
C2x,6.3.2.1 左值、数组和函数指示符,1:
左值是一个表达式(对象类型不是 void),它可能指定一个对象;...
c - C99(及更高版本)7.1.3 保留标识符是否缺少“外部”?
C89, 4.1.2 标准标题(已添加重点):
保留以下划线开头的所有外部标识符。
C99(及更高版本),7.1.3 保留标识符,1(强调添加):
所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符。
C 的基本原理,7.1.3 保留标识符,25(强调添加):
同样为实现者保留的是以下划线开头的所有外部标识符,以及以下划线开头的所有其他标识符,后跟大写字母或下划线。
因此,根据 C99(及更高版本),在:
(在文件范围内声明)_t
and_f
是保留的,这与 Rationale 和 C89 相矛盾。
这是否意味着 C99(及更高版本)在 7.1.3 保留标识符中遗漏了“外部”:“所有外部标识符……”?
UPD。桌子:
其中*
是一个可能的缺陷,见下文,并且**
是“在普通和标记名称空间中”(C11,7.1.3 保留标识符,1)。
在这里,我们看到 C99(及更高版本)保留更多(如果表格正确)。额外:为了什么目的?