在参考别人的代码时,看到这个:
#ifndef _PLOT_H
#define _PLOT_H
第一眼看到“#ifndef”,我还以为是单词打错了。(捂脸)
(代码的最后一行是“#endif”。)
这三个代码表示:防止该头文件重复引用。
比如这里的意思就是说:
#ifndef _PLOT_H:(if not define _PLOT_H)如果不存在_PLOT_H,
#define _PLOT_H:就引入_PLOT_H,
#endif:否则不需要引入
这就避免了_PLOT_H的重复引用。
这就出现了两个问题,什么是重复引用,以及为什么要避免头文件的重复引用?
顾名思义,重复引用就是多次引用一个头文件,也就是说一个头文件在一个cpp文件中多次被include。这是由于include嵌套造成的。比方说,A_H中include了C_H,而B_H中同时include了A_H和C_H,这就造成了C_H的重复引用。
至于为什么要避免头文件的重复使用,其实很容易想到,一看到重复这种词,为了避免重复,肯定是为了提高代码的效率。换种说法,如果代码中重复引用一个头文件,那代码的效率肯定比只引用一次的低。有些头文件的重复引用只是增加了编译工作的工作量,不会引起太大的问题,只是编译效率低一些,但是对于大工程而言,编译效率低下就是一个很痛苦的问题了。而有些头文件重复包含,可能会引起错误,比如在头文件中定义了全局变量,这种会引起重复定义。
那写程序时,是不是所有的头文件都要加#ifndef/#define/#endif?
当然也不是一定要加,但是加上#ifndef/#define/#endif或者用其他方式避免重复引用只有好处没有坏处,培养一个良好的编程习惯也是很重要的。