ページ 11

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

Posted: 2014年7月14日(月) 23:53
by zukai
C言語で次のようなプログラムを書いた場合、Cでは関数の引数の評価順序が規定されていないので、
出力が一意に決まらないと思います。

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

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

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

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

Posted: 2014年7月15日(火) 01:09
by h2so5
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" を参照)