为什么Eclipse生成的头文件以#ifndef和#define开头?

时间:2016-05-18 19:36:24

标签: c c-preprocessor

我知道#define函数是一个预处理器命令,它基本上复制并粘贴代码块,因为缺乏更好的解释。我不清楚的是它插入的Eclipse头文件的模板:

#ifndef <FileName>_H
#define <FileName>_H

//Code, definitions etc....

#endif

据我所知,它正在定义一个变量来告诉文件已定义的内容,我不知道为什么?这与PHP中的#INCLUDE_ONCE相同吗?我试图在这里和谷歌搜索这个,但我不太清楚我想要的命名是什么,我发现的一切都解释了它是什么,它是如何工作的等等......

修改

由于这与PHP中的#include类似,因此放入#include语句的最佳做法是什么?我会假设您希望它们在#define中,所以如果文件已经包含在内,它们就不会被包括在内这是否正确?如果包含的文件在#define命令之外,那么它们是否会被包括在内?

1 个答案:

答案 0 :(得分:0)

是的,这与PHP #INCLUDE_ONCE非常相似。这个想法是头文件包含在其他模块中使用的函数和变量的声明。这些模块必须#include头文件才能访问这些函数和变量。但是如果一个源文件#include是一个标题然后#include的另一个标题也是#include那个标题,那么你会得到这些声明的两个副本,这会导致各种各样的问题。

这种常用技术可防止重复包含。它确保#include的标题的任何代码单元在第一次请求时都会获得它的副本,但不会再次获得。