目的は4つ。
第1に、main関数の大きさとエラーの因果関係を確認すること。
第2に、どれくらいの大きさからエラー扱いされるのか調べること。
第3に、関数の大きさが何を単位として測られているのか調べること。
第4に、main以外の関数でも同様なのかを確かめること。
実際の手続きとしては、リスト1,2,3のようなプログラムを用意して、目的に応じた操作を加えつつ、コンパイル時のエラーの有無をチェックしました。
なお、以下において関数の行数とは、「{」から「}」までの行数を指します。
まず、リスト1のようなプログラムを材料として、printf文の行数を操作したところ、main関数が225行以上でエラーとなりました(目的1,2)。
個々のprintfで出力する文字の数を変えた場合も、結果は同じ。
注釈だけの行を入れたり、1つの命令を複数の行に分けて書いた場合は、新たに加えた改行の分だけ、多い行数でエラー。
逆に、1つの行に複数の命令を書いた場合は、減少した改行の分だけ、少ない行数でエラーとなりました(目的2,3)。
[リスト1] | #include<stdio.h> | int main() { | printf("A\n"); | /* 以下、繰り返し */ | return 0; | }
リスト2のプログラムでは、mainとsub、それぞれの行数を操作しました(目的2,4)。
mainはsubを呼び出すだけにして(printf文抜きの4行)、subの行数を操作した場合は、subが224行以上でエラー。
subを223行に固定して、mainの行数を操作した場合は、mainが225行以上でエラー。
逆に、mainを224行に固定した場合は、subが224行でエラーとなりました。
[リスト2] | #include<stdio.h> | void sub(); | int main() { | printf("A\n"); | /* 以下、繰り返し */ | sub(); | return 0; | } | void sub() { | printf("B\n"); | /* 以下、繰り返し */ | }
リスト3のプログラムは、インクルードファイルの影響を検討するために用意したものです。
この場合は、mainが1778行以上でエラーとなりました(目的2)。
[リスト3] | int main() { | int x; | x=1; | x++; | /* 以下、繰り返し */ | return 0; | }