Col*_*gon 1 c increment function-call
表达式的增量是否x++总是在变量复制到函数之后进行?
电话:
foo(x++, y);
Run Code Online (Sandbox Code Playgroud)
功能 :
int foo(int x, int y)
{
return x*y;
}
Run Code Online (Sandbox Code Playgroud)
这是所有编译器的未定义行为吗?
Sou*_*osh 10
让我们看一下这里的官方描述,以便更深入地了解.
对于后缀运算符,引用C11,章节§6.5.2.3
后缀
++运算符的结果是操作数的值.作为副作用,操作数对象的值递增(即,将相应类型的值1添加到其中).[...]在更新操作数的存储值的副作用之前,对结果的值计算进行排序.
关于函数调用,章节§6.5.2.3
在评估函数指示符和实际参数之后但在实际调用之前有一个序列点.调用函数(包括其他函数调用)中的每个评估(在执行被调用函数的主体之前或之后没有特别排序)对于被调用函数的执行是不确定地排序的.
因此,如上所述,您的代码中没有任何问题,如上所示.
x传递旧值,然后增加值.
但是,请注意第二个引用的最后一部分,您需要保持代码的完整性.例如,您需要确保在没有序列点之间没有值的变化.就像是
foo(x++, x++, y);
Run Code Online (Sandbox Code Playgroud)
将是一个问题,因为你试图x不止一次地改变同一个变量().
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |