#include <stdio.h> #define MAIN_RVAL 0 int main() { printf("hello, world\n"); return MAIN_RVAL; }一行目は、"stdio.h" というファイルを読込むためのものです。 stdio.h は、標準的な I/O に関する関数宣言、変数宣言をおこうためのヘッダファイルです。 この場合、printf()を利用するにあたり、その関数宣言をとりこもうとしているわけです。 で、stdio.h 自体は、 例えば、"/usr/include/stdio.h" という場所にあったりします。 一度、実際にみてみると良いでしょう。 というわけで、マクロ展開をすると、行の先頭の方に stdio.h (とそこからさらに include されたファイル達)がずらずらと挿入されます。
もう一つの MAIN_RVAL というのは、マクロ変数 MAIN_RVAL に関するもので、 2 行目では、MAIN_RVAL は 0 で置き換えるというルールを記述しており、 実際に、6 行目の MAIN_RVAL という文字列は 0 で置き換えられることになります。
gcc に途中経過をファイルにおとしたければ、
kamada@cygwin% gcc -E hello.c > hello.Eとしておけばいいでしょう。こんな感じになります。 ファイルの中を文字列サーチしてもらえば、printf のプロトタイプ宣言が挿入されていることが 分かるでしょう。 また、最後の最後に main 関数が書かれていますが、そのなかで、MAIN_RVAL が 0 に置き換えられている のも分かるでしょう。
2001.9.25/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp