【发布时间】:2011-04-19 17:08:44
【问题描述】:
这个classic ioccc entry 是一个用C 编写的Hello World 程序。谁能解释一下它是如何工作的?
原始代码(有意遗漏语法高亮):
int i;main(){for(;i["]稍微干净一点:
int i;
main()
{
for ( ; i["]<i;++i){--i;}"]; read('-' - '-', i++ + "hello, world!\n", '/' / '/'));
}
read(j, i, p)
{
write(j / p + p, i-- - j, i / i);
}
【问题讨论】:
-
为什么会有人在面试时问关于混淆代码的问题?!
-
从纯语言的角度来看,一点也不,因为
write()没有定义。 ;-)(我知道这可能意味着调用 POSIX write() 函数,但没有在任何地方说明。) -
更不用说
read()的K&R风格声明了。它可能无法使用现代编译器按原样编译。如果这出现在采访中,它只会作为人们围绕代码玩的游戏的对话开始才有意义,并了解受害者如何解决这个难题...... -
是的,有一些假设。 @Brian:这可能是因为解释它是如何工作的需要大量的理解,一个平庸的程序员可能没有的知识......也许。或者面试官认为他真的很聪明。
-
@Fabian:语法上是一样的。 [] 运算符是可交换的。
标签: c obfuscation