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