【问题标题】:c++ define directive on class in header file [duplicate]c ++在头文件中的类上定义指令[重复]
【发布时间】:2018-06-20 17:12:38
【问题描述】:

我有点了解#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 在程序的其他任何地方都没有使用

【问题讨论】:

    标签: c++


    【解决方案1】:

    如果您的源代码(通过任何路径)这样做:

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

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

    【讨论】:

      【解决方案2】:

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

      例如,如果A 包括BC,但B 还包括C

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

      【讨论】:

        【解决方案3】:

        查找“header guard”又名“include guard”。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-03
          • 1970-01-01
          • 1970-01-01
          • 2014-01-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多