例 7 式のグループ化は、その評価を完全には決定しません。次のフラグメントでは:
#include <stdio.h> int sum; char *p; /* ... */ sum = sum * 10 - '0' + (*p++ = getchar());
式ステートメントは、次のように記述されているかのようにグループ化されます。
sum = (((sum * 10) - '0') + ((*(p++)) = (getchar())));
ただし、 p の実際のインクリメントは、前のシーケンス ポイントと次のシーケンス ポイント ( ; ) の間の任意の時点で発生する可能性があり、 getchar への呼び出しは、その戻り値が必要になる前の任意の時点で発生する可能性があります。
したがって、基本的には、これを未指定の動作として理解しています-いずれか*p = getchar(); p++;
またはp++; *p = getchar()
。;
はシーケンス ポイントを意味しますが、式全体に他のシーケンス ポイントがないことに注意してください。
したがって、この構文は役に立ちません。そして、ほとんどの場合、ポインタ代入の ++ と -- は役に立ちません。右?