首先看一下编译过程:
预编译:完成替换。
编译源文件,生成符号表,只要符号被声明就行,不需要存在。如果符号没有声明,就会报编译错误。
链接,确认所有符号存在-------》如果符号不存在,也就是没有定义,就会报链接错误。
运行
比较好的做法:
cpp文件放函数的定义,头文件放变量和函数的声明。这样,这个头文件可以被其它使用这个函数的文件include。由于这里是函数声明,所以可以任意多个文件include它。
注意,cpp文件和头文件可以分别编译两个目标文件,在链接阶段进行链接。
include是预编译,所以会把头文件的内容copy到cpp文件。
小结:
1)变量和函数的声明放在头文件中,但是类的定义需要放到头文件中,类的实现放到cpp文件中。
2)const类型的对象是可以放到头文件中。
3)内联函数,可以放到头文件中。
4)如果类的实现,也就是函数定义放到头文件中,变成内联函数,也是允许的,这就是hpp的做法。但是仅仅放到头文件中,没有变成内联函数是不允许的。
5)头文件保护的作用是防止一个cpp文件多次include同一个头文件,而不是防止多个cpp文件include同一个头文件。也就是编译都是按照文件单位。
6)头文件中变量如果没有初始化就是声明;初始化了就是定义,此时被包含之后会发生重复定义的错误。全局变量的定义宜放在某个 .c 文件中,而 .h 文件里写的是变量的声明。头文件应用于声明而不是用于定义。
7

本文详细介绍了C++中变量和函数的声明与定义在编译过程中的作用,强调头文件(.h)通常用于声明,而源文件(.cpp)用于定义。头文件保护避免重复包含,全局变量用extern声明并在单独的.cpp文件定义,static变量限制作用域,const常量在编译时确定可直接定义在头文件中。
最低0.47元/天 解锁文章


被折叠的 条评论
为什么被折叠?



