C++ 关于声明,定义,类的定义,头文件作用,防止头文件在同一个编译单元重复引用,
不具名空间
1. 编译单元,一个.cc,或.cpp 作为一个编译单元.生成.o
2. 普通数据类型的定义,声明,函数的定义声明(类函数是一样的)
extern int x; //变量是声明,并未实际分配地址,未产生实际目
标代码
void print(); // 函数声明, 未产生实际目标代码
如 int x; int x = 3 ; void print() {}; //均为定义产生了实际目标代码。
声明不产生实际的目标代码,它的作用是告诉编译器,OK,我在
该编译单元后面,或者其它编译单元会有这个 x 变量,print 函数
的定义。否则编译器如果发现程序用到 x,print,而前面没有声
明会报错。如果有声明,而没有定义,那么链接的时候会报错未定
义。
比较常见的是我在 source.cc 中调用 print(),而 head.h 中声明
print(),而 source.cc 中 include
head.h 从而就有了 print 的声明,可以通过编译,但是如果在所有编译
单元中没有 print 函数的定义,那么链
接的时候 source.o 单元就会出错,因为它试图用 print 函数但是找不到
print 的定义。
//head.h
void pirnt();
//source.cc
void foo() {
print();
}
由于声明不产生实际代码,所以可以有多个重复声明的存在。
//source1.cc
extern int x;
//source2.cc
extern int x;
甚至同一个编译单元也可以有多各个重复声明
//source1.cc
extern int x;
extern int x;