c ++在头文件中的类上定义指令[重复]

Posted

技术标签:

【中文标题】c ++在头文件中的类上定义指令[重复]【英文标题】:c++ define directive on class in header file [duplicate] 【发布时间】: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 在程序的其他任何地方都没有使用

【问题讨论】:

【参考方案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”。

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

【讨论】:

以上是关于c ++在头文件中的类上定义指令[重复]的主要内容,如果未能解决你的问题,请参考以下文章

何时将静态函数定义放在 C 的头文件中?

头文件重复引用

C语言全局变量(c文件和h文件中的全局变量静态全局变量)使用注意事项

C语言全局变量(c文件和h文件中的全局变量静态全局变量)使用注意事项

C语言如何使用其他文件定义的结构体?(C++报错:无法转换到不完整的类需在头文件中定义结构体??)

C语言中怎样在头文件中定义一个能够在所有文件中都可以使用的全局数组变量 ?