C言語で次のようなプログラムを書いた場合、Cでは関数の引数の評価順序が規定されていないので、
出力が一意に決まらないと思います。
[プログラム]
a = 1;
printf("a = %d : a = %d", a++, a++);
私が考えた限り、第1引数から評価される場合(出力結果 a = 1 : a = 2)と第2引数から評価される場合(出力結果 a = 2 : a = 1)とで2パターンが考えられると思うのですが、その他のパターンがあるのでしょうか。
回答よろしくお願い致します。
※できれば、根拠(言語仕様などから)とともに答えていただけると幸いです。
関数の引数における評価順序
Re: 関数の引数における評価順序
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" を参照)
ここに書かれていますが、この場合の動作は「未定義」です。定義されていない以上は、どのような可能性も考えられます。
a = -100 : a = 999 と表示されるかもしれないし、プログラムがクラッシュするかもしれないし、コンパイラが停止するかもしれません。
(http://www.open-std.org/jtc1/sc22/WG14/ ... /n1570.pdf の "3.4.3 undefined behavior" を参照)