为什么 Eclipse 生成的头文件以#ifndef 和#define 开头?
Why do Eclipse-generated header files start with #ifndef and #define?
我知道 #define 函数是一个预处理器命令,由于缺乏更好的解释,它基本上是复制和粘贴代码块。我不清楚的是它插入的 Eclipse 头文件的模板:
#ifndef <FileName>_H
#define <FileName>_H
//Code, definitions etc....
#endif
我理解是定义一个变量来告诉某事文件已经定义了,不知道为什么? PHP 中的这种情况与 #INCLUDE_ONCE 中的情况相同吗?我试图在这里和 Google 上搜索这个,但我不太确定我想要的术语是什么,我找到的所有内容都解释了它是什么,它是如何工作的等等...
编辑
由于这类似于 PHP 中的 #include once,放置 #include 语句的最佳做法是什么?我假设您希望它们在 #define 中,因此如果文件已经包含在内,它们就不会被包含在内,这也正确吗?如果包含的文件不在#define 命令之外,那么无论如何都不会包含它们吗?
是的,这与PHP#INCLUDE_ONCE非常相似。这个想法是 header 文件包含在其他模块中使用的函数和变量的声明。这些模块必须#include header 文件才能访问这些函数和变量。但是如果一个源文件#include 是一个 header 然后#include 是另一个 header 那也是 #include 的那个 header,你会得到这些声明的两个副本,这会导致各种问题。
这种常用技术可防止重复包含。它确保#include 的任何代码单元 header 在第一次被请求时获得它的副本,但不会再次请求。
我知道 #define 函数是一个预处理器命令,由于缺乏更好的解释,它基本上是复制和粘贴代码块。我不清楚的是它插入的 Eclipse 头文件的模板:
#ifndef <FileName>_H
#define <FileName>_H
//Code, definitions etc....
#endif
我理解是定义一个变量来告诉某事文件已经定义了,不知道为什么? PHP 中的这种情况与 #INCLUDE_ONCE 中的情况相同吗?我试图在这里和 Google 上搜索这个,但我不太确定我想要的术语是什么,我找到的所有内容都解释了它是什么,它是如何工作的等等...
编辑
由于这类似于 PHP 中的 #include once,放置 #include 语句的最佳做法是什么?我假设您希望它们在 #define 中,因此如果文件已经包含在内,它们就不会被包含在内,这也正确吗?如果包含的文件不在#define 命令之外,那么无论如何都不会包含它们吗?
是的,这与PHP#INCLUDE_ONCE非常相似。这个想法是 header 文件包含在其他模块中使用的函数和变量的声明。这些模块必须#include header 文件才能访问这些函数和变量。但是如果一个源文件#include 是一个 header 然后#include 是另一个 header 那也是 #include 的那个 header,你会得到这些声明的两个副本,这会导致各种问题。
这种常用技术可防止重复包含。它确保#include 的任何代码单元 header 在第一次被请求时获得它的副本,但不会再次请求。