do {instructions...}
while (x--)
最初に指示を実行し、次にそうx
でないかどうかを確認0
し、結果に従ってループを続行/または終了し、これらすべての操作がデクリメントした後にのみ実行する必要 x
があります。
しかし、私のコンパイラは最初にデクリメントします。
誰が間違っていますか?私または私のコンパイラ;-)?理由を教えていただけますか?
do {instructions...}
while (x--)
最初に指示を実行し、次にそうx
でないかどうかを確認0
し、結果に従ってループを続行/または終了し、これらすべての操作がデクリメントした後にのみ実行する必要 x
があります。
しかし、私のコンパイラは最初にデクリメントします。
誰が間違っていますか?私または私のコンパイラ;-)?理由を教えていただけますか?
あなたの言っていること
最初に命令を実行し、次に「x」が「0」でないかどうかを確認し、結果に従ってループを続行/終了し、すべての操作が「x」をデクリメントした後にのみ実行する必要があります
どうあるべきか
最初に命令を実行し、次に「x」が「0」でないかどうかを確認し、次に「x」をデクリメントして、結果に従ってループを続行/または終了する必要があります
C の多くの式には、値と副作用があります。
式x--
の場合、値はx
以前の値です。副作用はx
の値を減らすことです。
したがって、x
1 から開始すると、実行がその式に到達すると、値 1
が生成され、0に設定されますx
。次に式が評価されると、値は0
にx
設定され-1
、...に設定されます。
流れは:
1)指示を行う
2)xの値を確認します
3.1)x == 0ですか?次にx--(xは-1になります)を実行し、ループを終了します
3.2)x!= 0ですか?次にx--を実行し、手順1)に進みます。