以下のようなwhile
ループがあります。
while (*d++ = *sc++)
dept のポインターを理解したいので、ループに入り、while
ループがポインターでどのように機能しているかを理解したいと思いwhile
ます。
で使用step
しましたが、完全にループgdb
には入りません。ループに入り、すべてのステップで操作を理解while
する方法はありますか。while
*
postfix よりも強くバインドします++
。++
右側が最後に適用されるため、次のようになります。
while (*d++ = *sc++)
以下と同じです:
while (*d = *sc)
{
d++;
sc++;
変更は、 でトレースする方がはるかに優れていますgdb
。
アップデート:
この OP のようにコーディングしないでください。
クールに見えるかもしれませんが、あなたが賢いことを証明します. 一般的な人間の脳で解析するのは難しいため、エラーが発生しやすいですか? 私たちはどちらを望んでいませんか?
上記で提案されたようなより明確な代替手段を選び、コンパイラーにコードをスクランブルさせてください。
オプション 1: Olaf Dietsche の提案に従って、アセンブリ コードのデバッグを調べます。
オプション 2:gcc -S test.c
アセンブル後にコンパイラを停止して、プログラムのアセンブリ コードを確認するために使用します。アセンブリ コードを理解するのは少し難しいかもしれません。詳細はこちら
オプション 3: プログラムを次のように書き直します。
while(1)
{
if(*d++ != *sc++)
{
break;
}
}
ブレークポイントを設定して、値の変化を確認できるようにします。
コードを書くための別の、しかし同じ方法は次のとおりです。
*d = *sc;
while (*d > 0)
{
d++;
sc++;
*d = *sc;
}