当前位置: 代码迷 >> 综合 >> #ifndef/#define/#endif
  详细解决方案

#ifndef/#define/#endif

热度:86   发布时间:2024-01-31 06:49:41.0

在参考别人的代码时,看到这个:

#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或者用其他方式避免重复引用只有好处没有坏处,培养一个良好的编程习惯也是很重要的。

  相关解决方案