これはまた別のシーケンス点の質問ですが、かなりシンプルなもの:関数呼び出しからのシーケンスポイント?
#include <stdio.h>
void f(int p, int) {
printf("p: %d\n", p);
}
int g(int* p) {
*p = 42;
return 0;
}
int main() {
int p = 0;
f(p, g(&p));
return 0;
}
はこの未定義の動作ですか?または、g(&p)
への呼び出しがシーケンスポイントとして機能しますか?
また、 'g(&p)'がシーケンスポイントとして機能するかどうかを質問します。 'g(&p)'の評価には、 'g 'の評価と'&p'の評価の間、 ''フル表現 '' * p = 42; 'と' ' 'return'の中で' 0'を返します。しかし、どちらも 'g(&p)'の評価に関して引数 'p'の評価を命じていません。 –
@EricPostpischil:素晴らしいコメントです。 :-) – Nawaz