C1x已成为ISO/IEC9899:2011,又名C11。
有没有人知道April 2011 draft n1570标准有什么变化(如果有变化的话
埃塔:有来自伦敦(2011年3月)(应包括在n1570中) here的委员会会议记录,以及来自华盛顿特区(2011年10月)here的会议记录;我认为DC会议记录中已接受的更改清单应该涵盖了这些内容。
发布于 2013-04-01 12:04:57
我今天刚刚了解到,在N1570和最终的C11标准(ISO/IEC9899:2011 (E))之间有一个(有点)重大的变化。
在N1570中,6.3.2p3说:
除非它是
sizeof运算符、_Alignof运算符或一元数组运算符的操作数,或者是用于初始化数组的字符串文字,否则类型为“&of type”的表达式将转换为类型为"pointer to type“的表达式,该表达式指向数组对象的初始元素,而不是左值。
包含_Alignof是一个错误,因为一元表达式的语法允许
_Alignof ( type-name )但不是
_Alignof unary-expression发布的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上看到的the thread。
发布于 2012-01-07 01:16:43
Jens Gustedt在评论中回答:
根据Larry Jones在comp.std.c上的评论,N1569没有显着变化(这是没有变化标记的N1570 )。唯一没有解决的问题是
__STDC_VERSION__的值,但我想最自然的就是201112L。
发布于 2012-01-07 08:20:05
国际标准化组织已经批准并发布了新的C编程语言C11 (C1x)标准ISO /IEC9899:2011。与C11 Wikipedia article中编写的先前标准(C99)相比,主要更改如下:
该标准包括对C99语言和库规范的几处更改,例如:
代码对齐规范(_Alignas说明符、_Alignof运算符、aligned_alloc函数、<stdalign.h>头文件)使用<>d14>关键字对_Noreturn函数代码表达式进行编码。例如,下面的宏cbrt(x)根据x的类型转换为cbrtl(x)、cbrt(x)或cbrtf(x):
#define cbrt(X) _Generic((X),long double: cbrtl,\ default: cbrt,\ float: float支持(_Thread_local存储类说明符,包括线程创建/管理函数的<threads.h>报头,互斥锁,条件变量和线程特定的存储功能,以及用于基于C Unicode技术报告ISO/IEC 19769:2004UTF-16/ access).
_Atomic类型限定符和<stdatomic.h> (用于存储UTF-16/UTF-32编码数据的char16_t和char32_t类型,包括<uchar.h>中的转换函数和相应的u和U字符串文字前缀,以及用于gets函数的UTF-8编码UTF-8编码UTF-8的UTF-8前缀的gets函数,ISO/IEC9899:1999/Cor.3:2007(E),支持一种新的安全替代方案,gets_s.
struct T { int tag; union { float x; int n; }; };.
#if独占创建和打开模式("…x"后缀)所理解时,将在比#if和#error更晚的阶段在转换期间对其进行评估。它的行为类似于POSIX中的O_CREAT|O_EXCL,通常用于锁文件。
quick_exit函数作为终止程序的第三种方法,用于在使用exit real + imaginary*I终止程序以构造复数值时至少执行最小的反初始化(部分原因是,如果imaginary为infinite或NaN,则real + imaginary*I可能不会产生预期值)。你可以从ISO网站上买到full published standard。以下是ISO网站的摘要:
ISO/IEC9899:2011规定了用C编程语言编写的程序的格式并建立了解释。它指定了
C programs;
ISO/IEC 9899:2011未规定
使用。
https://stackoverflow.com/questions/8631228
复制相似问题