デコードしようとしているプログラムがあります。これは別の言語 (名前はここでは語られていません) から C に翻訳されており、それがどのように機能するかを理解したいので、ゆっくりとコードを書き直し、C が提供する優れた論理構造をすべて使用するように単純化しています。
X
と のさまざまな値を使用して、次の小さなコードがコードに表示され続けますY
。
ptr[X]--;
while(ptr[X])
{
ptr[X]--;
ptr += Y;
}
ptr
は typechar *
であり、配列はループにかなり深く埋め込まれており、入力と出力に依存しているため、どの時点でも配列の状態について実際に推測することはできません。それを次のように「単純化」できます。
for(ptr[X]--; ptr[X]; ptr[X]--, ptr += Y);
しかし、それはただひどいです。わずかに優れているのは次のとおりです。
for(ptr[X]--; ptr[X]; ptr += Y) ptr[X]--;
誰かが上記のコードをより単純化できるかどうか知りたいのですが、大歓迎です。これは 5 つ以上の場所で発生し、フロー制御を単純化して理解する能力を損なっています。そのため、誰かがより簡潔で読みやすいバージョンを提供できれば、それは素晴らしいことです。私は基本的にそれが何をするかを理解していますが、誰かがそのコードに何らかの素晴らしい洞察を提供できるなら、それも素晴らしいでしょう.
X
特定のand/orのコードへの洞察Y
も役立ちます。Y
-2 から 2 の間になる傾向があり、X
通常は 1 です。