質問: { destiny, tree, green, you ... }; table[EAX](); と and $0xfffffff0, %esp sub $0x10, %esp EAX, esp はレジスタです。 この2つのプログラムの意味が分かりません。 特に上のC++のプログラムの記述法がなんなのかわかりません。 ラムダ関数とは少し違うみたいなんですが・・・・ おしえてください。
回答: こんにちは。 ``` int(table[])(void) = { destiny, tree, green, you ... }; ``` は、雰囲気的に関数ポインタ配列と思います。しかし、私の知る限りでは、下記のように記述します。 ``` int(*table[])(void) = { destiny, tree, green, you ... }; ``` table[i]が引数なしでintを返す関数へのポインタですね。 そして、table[i]();でその配列のi番目の関数を呼び出します。 `table0;`と同じ処理になります。 > > table[EAX](); > > > このような記述ができる処理系を知りませんが、レジスタEAXの値に従って関数を呼び出しているのかも知れません。 コンパイラは何でしょうか? > > and $0xfffffff0, %esp > > sub $0x10, %esp > > > これだけでは分かりませんが、16バイトのローカル変数領域を確保するコードかも知れません。 gccは16バイト・アラインを必ず確保するような話を聞いた気がします。最初の行はその16バイト・アライン調整のようにも見えます。 次の行は16バイトのスタック領域を確保しています。