现在的位置: 首页 > 综合 > 正文

c++头文件

2018年03月29日 ⁄ 综合 ⁄ 共 1519字 ⁄ 字号 评论关闭

c++的初学者往往都对c++中的变量声明,变量定义,头文件,#include,#define一头雾水;

 

在c++中,编译的时候事实上是对每一个源代码文件进行的独立编译,独立编译之后,会连接起来,产生可运行的EXE文件,但是处于两个不同源文件的函数和类之间也许有产生一些相互调用,因此必须在当前文件中对要引用的函数有一个代理性的描述,以此来帮助编译器进行传参,返回值等等的验证和校验,如下:

 

 

C++Test.cpp:

 

 

 

vary.cpp:

 

fn.cpp:

 

 

这就是变量声明,声明是不会分配内存的,而vary和fn源文件中分别是变量的定义,定义了一个整形类型的变量和一个函数;在上一篇文章中我们已经知道,这代表着变量和函数分别已经在数据区和代码区划分了内存,并且命名了标识;

 

加入改成如下代码:

 

 

会导致在内存块中重复定义了变量,标识名冲突,第二则是没有引用外部的变量a;

 

 

说明:在程序中,变量可以被多次声明,而不能被多次定义,因为定义需要分配内存,重复定义会导致内存中该标识冲突;而声明只是为了方便不同的源文件在编译过程中的相互引用;

 

 

神奇的INCLUDE:

 

我们在上面可以看到,如果,我在A.cpp和B.cpp源文件中都调用了say()和vary变量a,我们不得不在A.cpp和B.cpp中,都要写下如下一段代码:

 

extern int a;
extern int say(void);

 

这是一件十分麻烦的事情,如果,我们把段代码全部写在一个文件中,利用include来引入:

 

ref.h:

 

A.cpp:

 

B.cpp:

 

那么,就算以后fn的定义被修改为返回别的参数也好,或者说有1W个文件引用了这两个变量也好,我们的改动量和代码编写量都会少很多;

INCLUDE就是相当于一个文本替换的作用;

 

 

 

DEFINE:

我们在编写头文件的时候,经常会采用如下方法:

 

 

为什么我们会利用IFNDEF中来声明变量了,在介绍include的时候,我们说可以简单的理解成为文本替换的方式,但是往往某些情况一个A.cpp引用了B.h和C.h,但是因为B.h和C.h引用了一个相同的D.h,正常情况下,在A.cpp中会重复的引入两段D.h的声明文本,这样是不好的,但是如果我们在D.h采用如上的生命,那么在一个文件中第一次引用D.h的时候,因为TEST_H_没有定义,那么声明文本会被引入,并且TEST_H_会被定义,等到第二次引入的时候,此时TEST_H_已经被定义,这段声明文本会被跳过,从而避免了重复声明;

 

 

【上篇】
【下篇】

抱歉!评论已关闭.