C ++在头文件中的类上定义指令

时间:2018-06-20 17:12:39

标签: c++

我有点了解#define指令的作用及其便利性,但是在诸如此类的类上使用它时,这意味着什么?

#ifndef SAVINGS_H
#define SAVINGS_H
#include "account.h"

class Savings
{
protected:
public:
};
#endif

如果未定义SAVINGS_H,则它定义SAVINGS_H,但SAVINGS_H曾在哪里使用?为什么在所有大写字母中都将该类称为SAVINGS_H?

我知道您定义

之类的变量时
#define num 1

int arr[num]

num被替换为1,但是对于我的问题,程序中的其他任何地方都没有使用SAVINGS_H

3 个答案:

答案 0 :(得分:2)

如果您的源代码(通过任何路径)执行了此操作:

  #include "savings.h"
  #include "savings.h"

然后在第一个SAVINGS_H之后定义#include ,这将阻止重新定义savings.h头文件中的名称。这就是所谓的“包含保护”,它可以防止在同一翻译单元的头文件中重新定义名称。

答案 1 :(得分:1)

这就是所谓的Include Guard。这样一来,您的标头仅包含一次(以避免违反ODR,即同一实体的多个定义)。

例如,如果A包含BC,但是B也包含C

它们基本上是这样工作的:当编译器第一次包含头文件时,它定义了include保护宏。在所有后续包含中,由于已经定义了宏(ifndef),因此它仅跳过文件内容。

答案 2 :(得分:1)

查找“标题保护”(又称为“包含保护”)。

目的是防止头文件的多次包含(包括多次传递包含)。这将导致多次定义同一类型的问题。