1、C++/C程序文件结构:头文件(.h文件,用于保存程序的声明)+定义文件(.cpp/.c文件,程序的实现)
2、头文件组成:版权和版本声明+预处理模块+函数和类结构声明等,头文件中只存放“声明”而不存放“定义”。
注意:在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小:
3、头文件的引用方式:#include <filename.h>来引用标准库的头文件(编译器将从标准库目录开始搜索);#include “filename.h”来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
4、定义文件的组成:版权和版本声明+有文件的引用+程序的实现:
5、头文件的作用:
(1)源码实现不便公布时,可以只提供头文件和二进制的库即可。
(2)头文件能能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
6、目录结构:如果一个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存于不同的目录,以便于维护。例如可将头文件保存于include 目录,将定义文件保存于source 目录(可以是多级目录)。
注意:头文件的名字与定义源文件的名字不一定非要一样,但是一般习惯写成一样的
mine:1)编译只会编译.cpp/.c的源文件,并且这些源文件都是相互独立的进行编译成.o的目标文件;
2)头文件中的声明不进行编译,如果某个源文件需要用到某个头文件中声明的函数,则需要#include进来,在编译之前进行预编译(也就是把#include那部分的内容完完全全的替换为头文件中的东西,相当于把声明也放在源文件中了,之前说是独立编译,所以此刻仅仅有声明,但是没有定义,但是没有关系,相当于先告诉编译器有这么个函数,之后链接的时候会根据函数名去找该函数的定义),之后,再进行源文件的编译;
3)头文件中的函数可能被多个源文件都调用,所以可能会被#include很多次(即被声明很多次),但是其中的函数定义只可以在某个定义源文件中定义一次,加入头文件中也放定义,则就相当于在多个文件中出现了对于一个符号(变量或函数)的定 义,纵然这些定义都是相同的,但对于编译器来说,这样做不合法;
4)定义文件必须包含所将被定义的函数所在的头文件。
5)不管是定义,还是使用,都要包含相应函数的头文件,其实就是满足先声明后使用的原则。
网友评论