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 の値は、メイン関数の最初の for ステートメントで初期化され、変数 z は次の for ステートメントで初期化されます。

ANSIによれば、引数として4つの整数を持つメイン関数を持つことは合法ですか? int 変数の型を省略するのは良い習慣ですか? 関数パラメーターをローカル変数として悪用する必要がありますか? 誰が気にしますか、難読化では、実行時に正しいです。

于 2013-01-11T13:17:29.917 に答える