Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ #定义包含头文件c++;_C++ - Fatal编程技术网

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确实有区别。我同意这是一个假设,我现在正在编辑以包含实现保留注释。