C で関数を呼び出すときに、関数パラメータの評価順序を想定できますか? 以下のプログラムによると、実行したときに特に順序はないようです。
#include <stdio.h>
int main()
{
int a[] = {1, 2, 3};
int * pa;
pa = &a[0];
printf("a[0] = %d\ta[1] = %d\ta[2] = %d\n",*(pa), *(pa++),*(++pa));
/* Result: a[0] = 3 a[1] = 2 a[2] = 2 */
pa = &a[0];
printf("a[0] = %d\ta[1] = %d\ta[2] = %d\n",*(pa++),*(pa),*(++pa));
/* Result: a[0] = 2 a[1] = 2 a[2] = 2 */
pa = &a[0];
printf("a[0] = %d\ta[1] = %d\ta[2] = %d\n",*(pa++),*(++pa), *(pa));
/* a[0] = 2 a[1] = 2 a[2] = 1 */
}
ベストアンサー1
いいえ、C では関数パラメータは定義された順序で評価されません。
マーティン・ヨークの回答を見るC++ プログラマーが知っておくべき一般的な未定義の動作は何ですか?。