C のシーケンス ポイントについての理解を深めようとしています。何かを確認したかっただけです。g
現在、(1) は未定義であるのに対し、(2) は単に指定されていないと考えています。(2) では、 andの引数を評価した後にシーケンス ポイントが存在することに基づいています (したがって、シーケンス ポイント間で 2 回h
変更することはありません)。i
ですが、 の引数の評価順序f
はまだ指定されていません。私の理解は正しいですか?
#include <stdio.h>
int g(int i) {
return i;
}
int h(int i) {
return i;
}
void f(int x, int y) {
printf("%i", x + y);
}
int main() {
int i = 23;
f(++i, ++i); // (1)
f(g(++i), h(++i)); // (2)
return 0;
}
編集:
ここでの重要なポイントは、コンパイラがどちらかの前に両方のインクリメントを自由に実行できるかどうか、g
またはh
呼び出されるかどうかです.