2011-08-05 13 views
-1

重複の可能性:
Order of evaluation in C++ function parameters
Parameter evaluation order before a function calling in Cこの現象を説明してください。

:~/work_space/cprogs$ !cat 
cat expression_associativity.c 
#include<stdio.h> 

int main() 
{ 

    int i = 0; 

    printf("\n no-incr:%d pre-incr:%d post-incr:%d no-incr:%d post-incr:%d no-incr:%d \n", i, ++i, i++, i, i++, i); 

    return 0; 
} 

:~/work_space/cprogs$ !./ 
./expression_associativity 

no-incr:3 pre-incr:3 post-incr:1 ***no-incr:3*** post-incr:0 ***no-incr:3*** 
:~/work_space/cprogs$ 

なぜ最後と3として印刷途中 "無INCR" の値がありますか?最後の「no-incr」は0、中間は「no-incr」は1であると予想していました。

答えて

2

は未定義の動作です。

Unspecifiedでの関数引数の評価の順番で、結果は未定義です。

未定義動作とは何かが起こり、その動作を定義できないことを意味します。

+0

実際には「未定義」です。これは「未定義」とは著しく異なります。 – cnicutar

+0

@cnicutar:私の答えは、それが未指定であると述べています。この場合、不特定の動作は未定義の動作に終わります。 –

+0

以前のバージョンを見たことがある – cnicutar

1

引数の評価順序は未定義です。確実に唯一保証されるのは、関数が呼び出される前にすべての増分と減分が完了したことだけです。 Cの標準では、ここで何が印刷されるかを予測することはできません。

関連する問題