Kei*_*son 13
我今天刚刚了解到N1570与最终的C11标准(ISO/IEC 9899:2011(E))之间存在一个(有些)重大变化.
在N1570中,6.3.2p3说:
除非它是运算
sizeof符,_Alignof运算符或一元运算&符的操作数,或者是用于初始化数组的字符串文字,否则将类型为"数组类型 "的表达式转换为类型为"指向类型的指针"的表达式"它指向数组对象的初始元素,而不是左值.
包含_Alignof是一个错误,因为一元表达式的语法允许
_Alignof ( type-name )
Run Code Online (Sandbox Code Playgroud)
但不是
_Alignof unary-expression
Run Code Online (Sandbox Code Playgroud)
已发布的C11标准更正了此错误并恢复为C99措辞:
除了当它是的操作数
sizeof操作,或一元&运算符,或者是用于初始化一个数组,具有键入表达式文字串"的阵列类型 "被转换成的表达式,类型为"指针型 "即点到数组对象的初始元素,而不是左值.
更多信息:在最近向comp.std.c发布关于N1570与发布标准之间差异的帖子中,ISO C委员会成员Larry Jones写道:
其中有很多,但大多数只是轻微的编辑调整,对样板文本的更改,以及随意改变事物以保持快乐的权力.最大的变化是从一堆不应该添加的地方删除_Alignof(基于错误的概念,它需要一个类型或像sizeof这样的表达式,当它真的只需要一个类型时):6.3.2.1p2, p3,p4,fn.65; 和6.7.1 fn.121.
消息ID: <rfg33a-u0q.ln1@jones.homeip.net>
这是在groups.google.com上看到的主题.
Jens Gustedt在评论中回答:
根据Larry Jones对comp.std.c的评论,N1569没有显着变化(N1570没有变化标记).唯一尚未解决的问题是价值
__STDC_VERSION__,但我想这很自然201112L.