假设我用 C 或 C++ 编写 char c[99] = {'Stack Overflow'};
。它编译得很好,但这有效吗?有效是指不调用任何类型的未定义或未指定的行为。
再次,如果我写 char c[99] = 'Stack Overflow';
gcc 提示多字符常量,这很明显,但在上面,当我用大括号括起来时,编译器很高兴!为什么会这样?
我还注意到,在第一条语句之后的 puts(c);
将在 Stack Overflow
的位置输出一般字符串的最后一个字符“w”。为什么会这样?
有人可以分别解释这些行为吗?
最佳答案
他们都只是一个单一的文字,所以 c[0]
被设置为文字和 c[1]
... c[98]
用零填充(NUL 字符)。
我认为实际填充到 c[0]
中的值取决于实现,但它至少应该在任何兼容的编译器上编译。
编辑:根据标准验证,至少在 C++0x 中:
A multicharacter literal has type
int
and implementation-defined value.
在 C99 中(使用 the draft,因为它是免费的):
The value of an integer character constant containing more than one character (e.g.,
'ab'
), or containing a character or escape sequence that does not map to a single-byte execution character, is implementation-defined.
关于c++ - 这是一个有效的 C 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572409/