6

難読化された C コード コンテストの 1988 エントリである次のコードを実行しようとしています。

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}

エントリの説明から、このコードは自身の領域を見て pi を計算しています。コードを変更せずにコンパイルに成功しました。しかし、実行すると、値が 0.25 になりました。期待しているのは 3.14 です。コードの説明によると、K&R C で記述されており、ANSI C では変更しないと正しく動作しません。私はそれを適切に実行するためにそれらの変更を行う必要があると思います. 私は K&R C の経験がないので、上記のコードを ANSI C に変更したり、問題があれば指摘したりするのを手伝ってくれる人がいます。これを実行するために Microsoft Visual Studio 2008 を使用しています。

4

2 に答える 2

10

GCC を使用している場合は、' -traditional-cpp' フラグを付けてコンパイルします。

違いは、' -_' シーケンスが ' - -F<00' または ' 'に変換されるかどうか--F<00です。

1 つのスペースが重要です。これは、二重否定とプレデクリメントの違いです。

于 2009-10-09T06:17:30.993 に答える
2

行を変更します。

#define _ F-->00 || F-OO--;
于 2011-03-15T20:11:34.997 に答える