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
包括B
和C
,但B
还包括C
。
基本上它们是这样工作的:当编译器第一次包含头文件时,它定义了包含保护宏。在所有后续包含中,它只是跳过文件内容,因为宏已经定义(ifndef)。
【讨论】:
【参考方案3】:查找“header guard”又名“include guard”。
目的是防止头文件的多次包含(包括多次传递包含)。这会导致同一类型被多次定义的问题。
【讨论】:
以上是关于c ++在头文件中的类上定义指令[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C语言全局变量(c文件和h文件中的全局变量静态全局变量)使用注意事项
C语言全局变量(c文件和h文件中的全局变量静态全局变量)使用注意事项