2013-01-11 32 views
0

我发现从http://www.mazeworks.com/mazegen/maze_faq混淆后的迷宫发电机

int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0) 
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2] 
a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);} 

混淆的迷宫生成程序我不明白为什么主(Z,P,Q,R)是used.what被分配​​到这些变量?

回答

3

它obfuscted,你不应该去了解它:)

这是声明整型变量一个模糊的方式。当你没有在c中明确写出一个变量的类型时,我们假设为int。部分main(z,p,q,r)也可以写为int main(int z, int p, int q, int r),但那会很无聊。 当调用main时,没有值传递给这些变量,所以在函数开始时它们可以初始化。 z,p和q用argc的值和argv和envp的指针地址初始化。 r的值应该是未定义的。但是大多数这些值立即被丢弃。例如,变量p的值在main函数以for开头的for语句中和在next语句中的变量z中初始化。

根据ANSI将具有四个整数的主函数作为参数是合法的吗?忽略int变量的类型是否是好习惯?你应该滥用函数参数作为局部变量吗?谁在乎,在混淆时它在运行时是正确的。

+0

我想知道他们是否像argc,argv,envp一样被初始化。但他们不是。感谢您的帮助。 – avinayak

+0

@AululVinayak请注意'q'在被初始化之前使用。所以这仍然取决于'q'被分配了一些非0值...通常是指向环境的指针。 – kmkaplan

+0

q用'q = 3&(r = time(0)+ r * 57)/ 7'来初始化。看起来没有初始化。 – avinayak