当评估顺序指定为“从左到右”且语言是(伪)C类时,是以下示例中的序列点?
int x = 1;
int z = x-- + x; // z = 1 + 0 or z = 1 + 1?
my_func(x++); // x incremented before or after my_func execution?
my_func(x++ + --x); // combining those above
答案 0 :(得分:2)
序列点是语言标准定义为序列点的序列。我即将给出的答案适用于C,但另一种“C样”语言可能很好地定义了不同的序列点,因此对这些问题有不同的答案。
int z = x-- + x; // z = 1 + 0 or z = 1 + 1?
由于+
不是C中的序列点,因此上述语句的结果是未定义的。
my_func(x++); // x incremented before or after my_func execution?
x
在my_func
运行之前递增,但调用my_func
时使用旧值x
作为参数。
my_func(x++ + --x); // combining those above
未定义的原因与第一个原因相同。