Shammer's Philosophy

My private adversaria

include の動きを確認してみる

gcc の -e というオプションを使うと、プリプロセッサがどのようにソースコードを変更したのかを確認することができる。例えば、以下のような sub.c というソースを

int func1(){
    return 0;
}

main.c が include しているとする。

#include "sub.c"

int main(void){
    func1();
    return 0;
}

この main.c がコンパイル前にどのようになるかと言うと、

$ gcc -E main.c
# 1 "main.c"
# 1 "<command-line>"
# 1 "main.c"
# 1 "sub.c" 1
int func1(){
    return 0;
}
# 2 "main.c" 2

int main(void){
    func1();
    return 0;
}
$ 

となる。ここで、sub.c が #include とかあると、この stdio.h も展開されて main.c の中に取り込まれる様子を確認することができる。