<分区>
关于序列点的规则对以下代码说明了什么?
int main(void) {
int i = 5;
printf("%d", ++i, i); /* Statement 1 */
}
只有一个 %d
。我很困惑,因为我在编译器 GCC、Turbo C++ 和 Visual C++ 中得到 6 作为输出。行为是否明确定义或什么?
这与我的last question有关.
<分区>
关于序列点的规则对以下代码说明了什么?
int main(void) {
int i = 5;
printf("%d", ++i, i); /* Statement 1 */
}
只有一个 %d
。我很困惑,因为我在编译器 GCC、Turbo C++ 和 Visual C++ 中得到 6 作为输出。行为是否明确定义或什么?
这与我的last question有关.
最佳答案
由于两个原因,它是未定义的:
i
的值被两次使用,中间没有序列点(参数列表中的逗号不是逗号运算符,不引入序列点)。
您正在调用范围内没有原型(prototype)的可变参数函数。
传递给 printf()
的参数数量与格式字符串不兼容。
默认输出流通常是行缓冲的。如果没有 '\n'
,则无法保证输出将有效输出。
关于c++ - 这是 C/C++ 中的未定义行为吗(第 2 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5390274/