上学的时候,学习c++接触到头文件和cpp文件。一开始始终无法理解,为什么会有这两种文件,这两种文件有啥作用?
简单理解的话:
头文件中存放函数的声明,cpp文件中存放定义
为何在头文件不放置函数或者变量定义呢?
1.当程序在编译过程中,编译器是吧代码进行扫描,查看代码语法是否正确,生成.o文件
2.程序生成二进制文件时,会将.o文件进行链接,此时如果在不同的.o文件中存在相同的符号,就会报重复定义的错误
因此如果在头文件中放置函数或变量定义,假如该头文件被多个cpp文件引用的话,当连接的时候就会发生重复定义错误(假设头文件中定义的函数变量都有外部属性)
通过上面的原因我们知道在头文件是不可以定义函数和变量的,对于函数来讲如下定义是声明:
void fun();
对于变量来讲的话,则为如下格式;
extern int a;
这个意思是指对变量a设置外部链接属性,与static意义相反,加上extern字段指明a为声明,不会对a分配内存,因此在链接过程中不会出现重复定义,因为整个内存中只会有一份变量a,变量a的定义只需要在一个cpp文件定义就可以了
如果在头文件中使用const 或 static 字段,则限制了该变量的作用域,仅在本文件中使用,在别的文件将无法被使用,但是不建议在头文件中使用,因为这么做会污染命名空间造成不必要的烦恼