関数の引数における評価順序

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
zukai

関数の引数における評価順序

#1

投稿記事 by zukai » 9年前

C言語で次のようなプログラムを書いた場合、Cでは関数の引数の評価順序が規定されていないので、
出力が一意に決まらないと思います。

[プログラム]
a = 1;
printf("a = %d : a = %d", a++, a++);

私が考えた限り、第1引数から評価される場合(出力結果 a = 1 : a = 2)と第2引数から評価される場合(出力結果 a = 2 : a = 1)とで2パターンが考えられると思うのですが、その他のパターンがあるのでしょうか。

回答よろしくお願い致します。
※できれば、根拠(言語仕様などから)とともに答えていただけると幸いです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 関数の引数における評価順序

#2

投稿記事 by h2so5 » 9年前

https://www.jpcert.or.jp/sc-rules/c-exp30-c.html
ここに書かれていますが、この場合の動作は「未定義」です。定義されていない以上は、どのような可能性も考えられます。
a = -100 : a = 999 と表示されるかもしれないし、プログラムがクラッシュするかもしれないし、コンパイラが停止するかもしれません。

(http://www.open-std.org/jtc1/sc22/WG14/ ... /n1570.pdf の "3.4.3 undefined behavior" を参照)

閉鎖

“C言語何でも質問掲示板” へ戻る