85得票2回答
C17是什么,语言有哪些变化?

我在查阅GCC 8的新闻时看到,他们为C语言的2017版本添加了支持(不是C++17,确实是C17),但我在互联网上找不到任何相关信息。 它是像C11一样的新ISO版本,还是GCC团队用于修复编译器中某些问题的代号?

33得票3回答
在C语言中,定义int a = 0, b = a++, c = a++的行为是否定义良好?

在C语言中,定义int a = 0, b = a++, c = a++;是否具有定义行为? 或者几乎等效地说,在对象定义中的逗号是否引入了一个序列点,就像表达式中的逗号运算符一样? 类似的问题也被提出过关于C++: `int a = 0, b = a` 是否具有未定义行为? 变量列表...

12得票2回答
C17要我如何初始化原子变量?

C17标准废弃了stdatomic.h中的ATOMIC_VAR_INIT,这意味着它仍然支持它,但不希望使用它。在C17中,正确的非废弃的原子初始化方式是什么? 与非原子类型相同: atomic_int foo = 42; 还是什么新东西?

11得票2回答
在C17中,i=i++将被重新定义吗?

今天我偶然看到了一个问题 "为什么这些使用前后自增的语句是未定义行为?",于是我决定获取最新的C标准草案并仔细阅读。 很快我在C17草案中发现了以下段落:表达式是一系列运算符和操作数,用以指定计算值、指定对象或函数、生成副作用或进行组合等。运算符的操作数计算值的顺序先于运算结果的计算值。来源:...

11得票1回答
将字符串文字索引化是初始化常量表达式吗?

以下代码尝试在两个不同的常量上下文中使用字符串文字的数组索引: static char x = "abcx"[3]; _Static_assert ("abcx"[3] == 'x', "..."); 根据编译器浏览器的显示,工具供应商普遍认为在第二个上下文中执行此操作是不允许的,因为...

8得票1回答
这个涉及到使用可变数组成员的两个结构体定义的C程序是否已经被定义?

一个包含柔性数组成员的结构体是一种可以声明变量并用 sizeof 进行计算大小的类型,这导致以下程序出现了异常行为。 文件 fam1.c: #include <stdio.h> #include <stddef.h> struct s { char c; ...