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

Posted on 2012-02-08 21:10  无忧consume  阅读(300)  评论(0编辑  收藏  举报

《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头文件中实际有用的代码了。这样保证了头文件只会被处理一次。

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

Copyright © 2024 无忧consume
Powered by .NET 8.0 on Kubernetes