这些标题详细信息是否正确编写?

时间:2019-02-05 03:40:37

标签: c++

我有一个名为calendarType.h的头文件

添加

是否合适
#ifndef calendarType
#define calendarType

#endif as the last row?

2 个答案:

答案 0 :(得分:2)

是的,它们将确保在每次编译期间#ifdef#endif之间的行仅被解析一次(即使它们从多个位置得到#include

我唯一可以做的不同的事情是在前两行中将calendarType更改为calendarType_h -这将有助于确保#define的宏令牌不会不会干扰任何名为calendarType的类或结构。

答案 1 :(得分:1)

这些被称为包括卫兵。在大多数头文件中都应使用它们,以避免出现称为双重包含的问题。双重包含很可能导致编译失败。来自维基百科:

  

如果两次定义了某些C或C ++语言构造,则结果转换单元无效。

#pragma once是传统 include卫兵的替代。尽管实际上不是C ++标准的一部分,但跨编译器都很好地支持它。 #pragma once键入的代码更少,更不容易出错(例如,意外地重用了相同的include防护)。