2011-06-20 3 views
0

にプログラムの作業を以下のんが、プログラムがどのようにここでのprintf

#include<stdio.h> 
int main() 
{ 
int i=2; 
printf("I=%d i=%d\n",++i,++i); 
} 

である私が得た出力は、それが私には少し意外で出力され

4 4 

ました。 ++はどのように動作しますか?結果は4 4で、3 4ではないのはなぜですか?

ちょうどそれを読んで、それはあなたが人々が重複としてそれをマークしているスレッドとは異なります。

+1

このような質問は、このサイトでたくさん*尋ねられています。あなたは、新しい質問をする前に、既存の質問を検索するように指摘する必要があります。 –

+0

問題を理解しなくてもそれを閉じた人には恥がかかります。 –

+0

私はそれが価値があるために、投票には投票しませんでした。とにかく、この質問に対する答えは、既存の質問に対する答えと本質的に同じです。すなわち、介在するシーケンスポイントなしで変数を読み書きすることは未定義の動作であり、コンパイラは必要なものを実行することができます。 –

答えて

2

未定義の動作。変数の値を変更したり、同じ変数で複数回読み取ったりしないでください。sequence point

-1

++ iはiがその行の前にインクリメントされるため、プログラムは以下の違いはありません。

#include<stdio.h> 
int main() 
{ 
    int i=2; 
    i++, i++; 
    printf("I=%d i=%d\n",i,i); 
} 
+0

@Cem Kalyoncuは上記の行動を説明することができますか? –

+0

@Cem - これは間違っています。両方のインクリメントが 'printf'の前に起こるという約束はありません。実際に何が起きたかを反映していますが、この動作は定義されておらず、期待すべきではありません。 OPのプログラムはあなたの答えのコードと同じではありません。 – littleadv

+0

@littleadv:++ iの場合、定義されていない動作を言ったソースは見たことがありません。私は詳細を知らないが、これは私が読んだものです。あなたの主張を支持する参考資料を提示すれば幸いです。 –