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]]);}

我不明白为什么要使用 main(z,p,q,r)。分配给这些变量的是什么?

4

1 回答 1

3

它被混淆了,你不应该理解它:)

这是声明整数变量的一种模糊方式。当您没有在 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 语句中初始化,变量 z 在下一个 for 语句中初始化。

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

于 2013-01-11T13:17:29.917 回答