#define 包含头文件 C++
#define to include header file c++
我觉得自己对#define
的语法有点迷茫。例如,我们可以header
文件包含为
#include "header.h"
但我做了一些逻辑实验,发现
#define header
导致相同的结果。因此
#define header_H
#define _header_H_
你能说说它们之间有什么区别吗?通过#define
包含文件的整个想法看起来很有趣,前提是我们有#include
.这个标志_
是什么意思?我在预处理器教程中没有找到它的定义。
我的假设是,您的困惑是包含守卫使用任何名称的原因。_
(下划线)除了是有效的标识符外没有任何意义*,名称header_H
只是设计为唯一的,因此标头的内容只编译一次,并且不会导致重复符号的问题。虽然这是不好的做法,但您的包含保护可能是#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
* 不鼓励使用下划线作为前缀,因为它保留给实现。
#include "header.h"
这被编译器替换为 header.h
的代码。
#define header
这只是定义了一个"标记"(不知道如何称呼它)。它可以在一些类似的代码中使用
#ifdef header
puts("It is defined!");
#else
puts("Oh no!");
#endif
下划线可用于变量的名称,也可用于定义。除了系统库中使用的许多函数都以下划线开头这一事实之外,它们没有任何意义。因此,编写一个名为 _exit
的函数会导致很多问题,因为有一个重要的系统调用称为这样。
如果define
在你的情况下像include
一样工作,那么我可以猜到你的编译器喝醉了,或者你在代码中的其他地方#include "header.h"
了。
使用 #include
就可以做到这一点,将文件包含在您的项目中。但是,C++编译器不够聪明,无法理解您是否使用两次#include samefile
,因此,它将添加相同的文件两次。这是进来#define
。如果尚未包含#ifndef __FILE__
,则使用#define __FILE__
,以便编译器知道它已被包含。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到