C11的最新变化

J. *_*mon 34 c standards c11

C1x已成为ISO/IEC 9899:2011又名C11.

有谁知道2011年4月草案n1570标准中有哪些变化(如果有的话)?

ETA:有从伦敦(2011年3月)的委员会会议记录(其中应包括在n1570)这里,从华盛顿特区(2011年10月)在这里 ; 我想DC分钟中接受的变化列表应涵盖的内容.

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上看到的主题.


J. *_*mon 5

Jens Gustedt在评论中回答:

根据Larry Jones对comp.std.c的评论,N1569没有显着变化(N1570没有变化标记).唯一尚未解决的问题是价值__STDC_VERSION__,但我想这很自然201112L.

  • 官方2011标准留下了`__STDC_VERSION__`和可选的`__STDC_LIB_EXT1__`错误定义.第一份技术勘误定义为"201112L". (3认同)