#define包含头文件c ++

时间:2015-04-15 15:27:35

标签: c++

我觉得自己对#define的语法有点迷茫。例如,我们可以将header文件包含为

#include "header.h"

但我做了一些逻辑实验并发现了

#define header

导致相同的结果。因此,

#define header_H
#define _header_H_

请问,请说出所有这些之间有什么区别?通过#define包含文件的整个想法看起来很有趣,前提是我们有#include。这标志_是什么意思?我没有在预处理器教程中找到它的定义。

3 个答案:

答案 0 :(得分:3)

我的假设是,你的困惑是为什么包含警卫可以使用任何名字。 _(下划线)没有意义*除了它是有效的标识符之外,名称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

* 不建议使用下划线作为执行保留。

答案 1 :(得分:1)

#include "header.h"

编译器将其替换为代码header.h

#define header

这只是定义了一个'标记'(不知道如何调用它)。它可以在某些代码中使用

#ifdef header 
    puts("It is defined!");
#else
    puts("Oh no!");
#endif

下划线可以用在变量的名称中,也可以用在定义中。它们没有任何意义,除了系统库中使用的许多函数都以​​下划线开头。因此,编写一个名为_exit的函数会导致很多问题,因为有一个像这样的重要系统调用。

如果define在您的情况下与include类似,那么我可以猜测您的编译器已经醉了,或者您的代码中的其他位置#include "header.h"

答案 2 :(得分:1)

使用#include就可以了,将文件包含在项目中。但是,如果你使用#include samefile两次,C ++编译器就不够聪明,因此,它会两次添加相同的文件。这是#define进来的。如果尚未包含#ifndef __FILE__,则使用#define __FILE__和{{1}},以便编译器知道它已包含在内。