如何转换K& R C至ANSI C?

时间:2009-10-09 05:58:31

标签: c obfuscation kr-c

我正在尝试执行以下代码,这是1988年的混淆C代码竞赛条目。

#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&amp; R C中并且在没有一些改变的情况下在ANSI C中无法正常工作。我想我必须做那些修改才能正确执行它。我之前没有K&amp; R C的经验。所以有人可以帮助我将上述代码更改为ANSI C或指向问题(如果有的话)。我正在使用Microsoft Visual Studio 2008来执行此操作。

2 个答案:

答案 0 :(得分:10)

如果您有GCC,请使用“-traditional-cpp”标记进行编译。

区别在于“-_”序列是否已翻译为“- -F<00”或“--F<00”。

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

答案 1 :(得分:2)

更改行:

#define _ F-->00 || F-OO--;