C语言中for循环初始化中的评估顺序

恩桑切斯

考虑以下C代码片段:

int a;
int b;
for (a = 0, b = a + 1; a < N; a++)
    /* Something. */

C规范是否明确要求编译器按其出现顺序将语句保留在for-initializer中?

我专门试图避免未定义的行为,例如,如果a是在外部/全局范围内,并且规范在此特定领域中并不严格。换句话说,我想确保上面的示例为编译器定义了明确的定义,并且不要输入诸如的灰色区域a = ++a + b++;

迈克猫

不是特别在for-initializer中,逗号运算符(a = 0左边的表达式将首先被求值,然后右边的(b = a + 1)将被求值。

N1256 6.5.17逗号运算符

逗号运算符的左操作数被评估为void表达式;评估后有一个序列点。然后评估正确的操作数;结果具有其类型和价值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在OO语言中初始化对象属性的最佳实践

在C语言中初始化多个资源的函数中,有什么好的方法处理错误(清除和中止)?

C语言数组中未初始化元素的值

了解C ++中的初始化顺序

初始化中的评估顺序

C ++ 11中的延迟初始化顺序

使用for循环初始化顺序值?

C语言中的常量整数和数组初始化

影响C ++中的初始化顺序

C语言中的声明,初始化,指令

C ++中初始化程序列表的顺序

Rust中函数参数评估和结构初始化的顺序是什么?

C语言中初始化指针的不同方法之间的区别

模板中的C ++静态const初始化顺序

错误:初始化元素不是C语言中的编译时常量

在C语言中,数据段或BSS中的malloc()初始化了全局指针吗?

在C ++对象中初始化数据成员的正确顺序

如果未在C语言中预先给出整数的大小,是否可以在数组中初始化整数?

了解C语言中的低级初始化

C语言中的毛刺初始化矩阵

在C语言中,何时必须在结构初始化和定义中包括结构名称?

再次关于C ++中的静态初始化顺序

了解快速语言中的取消初始化和继承

如何初始化C语言中的unsigned long long

C语言中的初始化数组中的“ movq”和“ movw”是什么意思?

在 C# 中,类的属性是并发初始化还是顺序初始化?

c语言中数组初始化的困惑

C语言中的链表初始化

C++中关于常量初始化和零初始化的顺序的矛盾定义