はじめに 「コンパイラって、関数のインライン展開を何段までやってくれるんでしょうか?これってトリビアになりませんか?」 このトリビアの種、つまりこういうことになります。 「コンパイラに多段呼び出しの関数を食わせてインライン展開させた時、☓☓段で力尽きる」 実際に調べてみた。 ソース 関数の多段呼び出しをするコードを吐くRubyコードを書いた。 num = ARGV[0].to_i puts <<EOS #include <stdio.h> int func0(int a){ return a + 1; } EOS num.times do |i| puts "int func#{i+1}(int a){return func#{i}(a);}" end puts <<EOS int main(void){ int a = 0; printf("%d\\n",func#{num}(a));