《c++primer》学习随笔——预处理器变量

第一遍看这本书的时候,稍微扫了一遍这个内容,当时看起来有时生硬,不是很懂,等于跳了过去了。现在再看,感觉很有用,也基本能看明白了。说个题外话,有时候看有些内容,第一次看到的时候,觉得很难理解很难理解,就是反复看好几遍也理解不了。那么不妨就放下这段内容,也许你学过后面的内容的后,有天你再返回来看当初不懂的,就豁然开朗了,学习这本c++primer的过程中,真的有太多的这种体会了。

开始正题:

#define 指示的接受后面的名字,并把这个名字定义为预处理器变量,常用大写。
#ifndef  字面意思就是if not define 如果没有定义。就是如果后面的名字没有被定义成预处理器变量,那么这句话后所有的程序都将被执行,直到遇见#endif

说明具体用法和意义。
假如我自己写了两个头文件one.h,和two.h。其中one.h包括的是一个类的定义;two.h由于也要用到这个类,所以这个头文件里面必然要有一行程序:#include“one.h”。
而我们的主程序里面,开始必然要把我们自己定义的头文件给加进去,必然应该有两行程序:#include“one.h”和#include“two.h”,这样实际上one.h这个头文件被包含了两次,那个类的也相当于定义了两次,必然编译时会出现错误,为了解决这个问题。在one.h里应该加入这么一段程序:
#ifndef ONE
#define ONE
//这里应是one.h里面本来应该有的代码程序
#endif
这样这个头文件在主程序处理时只会被处理一次。因为:当主程序首先碰到这句::#include“one.h,时,由于是第一次处理one头文件,ONE这个预处理器变量还没有定义呢,所以会执行#define ONE这个语句,ONE变量被定义了,头文件one中的代码也会被执行了。当主程序碰到这句:#include“two.h”,由于two头文件中,也有这么一句:#include“one.h”,然后程序就会再次进入到one这个头文件中执行,这是由于ONE这个变量在第一次执行one这个头文件时已经被定义了,所以#ifndef ONE判断失败,不会执行后续的代码了,也就不会在执行one头文件中实际有用的代码了。这样保证了头文件只会被处理一次。

因此应该在自己编写的每个头文件中都加上保护符,避免头文件被多次包含。

posted on 2011-06-15 20:13 古月 阅读(825) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章档案

C++/C

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜