我正在尝试执行以下代码,这是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来执行此操作。
答案 0 :(得分:10)
如果您有GCC,请使用“-traditional-cpp
”标记进行编译。
区别在于“-_
”序列是否已翻译为“- -F<00
”或“--F<00
”。
一个空间至关重要:它是双重否定与预先减少之间的区别。
答案 1 :(得分:2)
更改行:
#define _ F-->00 || F-OO--;