一个函数包括定义与声明,定义中包含了函数是如何实现的,声明则阐明函数如何被调用。
工程上为了将个函数模块化,通常将声明与定义分开,一般将主函数定义放在.c中,其他函数定义放在源文件.cc中,函数声明放在.h中。
.c 中包含主函数,并include所有使用到的头文件;
.cc中包含其他函数定义,并include需要的.h文件或需要的非本函数的声明;【保证这个源文件可以单独编译成功
如果不将函数的声明与定义分开,将函数声明和定义都放在.h中,那如果现在要增加一个函数的声明文件2.c,这个新函数include其他头文件1.h,那么在编译1.c和2.c时,1.h中的函数定义将在对象文件中出现两次,报duplicated错误。
简而言之,如果不分开,其他.c文件可能只是想用一下前面函数的声明,但确错误地一并引入函数定义,就会报错。
.h中包含库函数声明,一些函数的声明。
还有一个问题,万一.h中有函数定义,这时,如果重复包含头文件,同样会报duplicated错误,因为.h在预编译时进行简单替换,就会出现多个同样的函数定义。
解决方法为条件编译:
#ifndef _HEADERS1_H//未定义,执行如下操作,如有定义,则不执行
#define _HEADERS1_H//定义宏
...
#endif
如果想让自己的文件变为尖角号而不是引号
#include <xxx.h>
则需要用命令将当前目录加到系统路径中
g++ -I./