C++ #定义包含头文件c++;
我觉得自己对C++ #定义包含头文件c++;,c++,C++,我觉得自己对#define的语法有点迷茫。例如,我们可以将标题文件包含为 #include "header.h" 但我做了一些逻辑实验,发现 #define header 结果也是一样的。因此, #define header_H #define _header_H_ 你能说一下它们之间的区别吗?如果我们有#include,那么通过#define包含文件的整个想法看起来很有趣。这个符号是什么意思?我在预处理器教程中没有找到它的定义 #include "header.h" 这被编译器替换为h
#define
的语法有点迷茫。例如,我们可以将标题
文件包含为
#include "header.h"
但我做了一些逻辑实验,发现
#define header
结果也是一样的。因此,
#define header_H
#define _header_H_
你能说一下它们之间的区别吗?如果我们有#include
,那么通过#define
包含文件的整个想法看起来很有趣。这个符号是什么意思?我在预处理器教程中没有找到它的定义
#include "header.h"
这被编译器替换为header.h
#define header
这只是定义了一个“标记”(不确定如何调用它)。它可以在这样的代码中使用
#ifdef header
puts("It is defined!");
#else
puts("Oh no!");
#endif
下划线可以用在变量的名称中,也可以用在定义中。它们没有任何意义,只是系统库中使用的许多函数都以下划线开头。因此,编写一个名为\u exit
的函数将导致很多问题,因为有一个重要的系统调用,名为这样
如果在你的例子中
define
像include
那样工作,那么我可以猜到你的编译器喝醉了,或者你的代码中有#include“header.h”
使用#include
就可以做到这一点,将文件包含到项目中。然而,C++编译器不够聪明,如果你使用<代码> >包含SAMFELILE < /C> >两次,结果,它会添加相同的文件两次。这是WARE#define
的输入。如果尚未包含该文件,则使用\ifndef\uuuuu文件
,然后使用\define\uuu文件
,以便编译器知道该文件已包含。我的假设是,您的困惑在于,为什么包含保护可以使用任何名称。\u
(下划线)没有任何意义*除了它是一个有效的标识符外,标题的名称仅设计为唯一,以便标题的内容只编译一次,不会导致重复符号的问题。虽然这是一种不好的做法,但您的include-guard可以是#define a
、#define abc
或任何其他未保留的有效字母数字组合
#ifndef HEADER_H //<- as I mentioned could be anything valid and not reserved
#define HEADER_H //<- Now this must be the same to work properly
... // defines
#endif
\ifndef HEADER\u H//什么是“导致相同的结果”?我严重怀疑这一点。我的意思是,代码构建时就好像包含了头文件一样。代码构建时是否也没有#define
或#include
?如果是这样,它就不太重要了,代码< >包括“页眉h”/代码>是C.<代码>包含< /代码>是C++…,-)哈维也不正确。这个uu确实有区别。我同意这是一个假设,我现在正在编辑以包含实现保留注释。