关于C++ 编译单元的问题
a.h
#ifndef A_HH
#define A_HH
int add_2(int i, int j);
#endif
a.c
int add_2(int i, int j)
{
return (i+j);
}
b.c
#include <stdio.h>
#include "a.h"
int main(void)
{
printf("2+3=%d\n", add_2(2,3));
return 0;
}
这样a.c b.c编译形成的a.o b.o的编译单元内(按照C++的标准是.c .cpp这样的资源文件应该是一个编译单元),是不是各自都包含了a.h,换句话说,编译宏定义
#ifndef ....这样的东西是对一个编译单元比如a.c->a.o有效,编译b.c->b.o时这个宏是不是被重新定义了一下。
而且,在b.o中关于add_2()的符号是要到连接时刻在a.o中找到,在C++中,如何区分是一个外部连接(可以在连接时刻找到符号),内部连接呢?