double *p;
显然,gcc 4.6.3仅在p
下的以下行中将-O3
增加1。
myfunc (*(p++), *(p++));
这是一个错误吗?
答案 0 :(得分:1)
*(p++)
不会增加指针指向的值。
如果你希望增加值,你可以(*p)++
;
另一件事是,您无法保证评估参数的顺序。这取决于编译器。所以左侧可以先增加,然后可以增加第二个。无论一个参数是否与原始值一起发送,下一个参数将是原始值+ 1(由于后期增量的性质); 在函数外部,如果你没有在其中修改* p,* p应该增加两次。
答案 1 :(得分:1)
如果增量运算符修改same variable
中的same sequence point (statement)
,则会导致未定义的行为。
例如,如果你调用这样的函数:
foo(++i, ++i)
C标准没有说明应该以哪种顺序执行增量,并且您无法预测将传递给函数的内容。 与你的功能相同。
myfunc (*(p++), *(p++))
他们中的任何一个都可以先评估。