6

我正在尝试执行以下代码,这是 1988 年 Obfuscated C Code Contest 的参赛作品。

#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'。

一个空格是至关重要的:它是双重否定和预先减量之间的区别。

于 2009-10-09T06:17:30.993 回答
2

换行:

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