【问题标题】:Are these header details being written properly? [duplicate]这些标头详细信息是否正确编写? [复制]
【发布时间】:2019-06-28 20:37:40
【问题描述】:

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

添加合适吗

#ifndef calendarType
#define calendarType

和

#endif as the last row?

【问题讨论】:

    标签: c++


    【解决方案1】:

    是的,这些将确保#ifdef 和#endif 之间的行在每次编译期间仅解析一次(即使它们从多个位置获得#include'd)

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

    【讨论】:

    • endif 后面必须有任何东西
    • 再喜欢文件名,或者我可以说:#endif
    • 不,#endif 之后没有任何内容
    【解决方案2】:

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

    如果某些 C 或 C++ 语言结构被定义两次,则生成的翻译单元无效。

    #pragma once 是传统包括警卫的替代品。虽然实际上不是 C++ 标准的一部分,但它在编译器中得到了很好的支持。 #pragma once 输入的代码更少,更不容易出错(例如,不小心重复使用相同的包含保护)。

    【讨论】:

      猜你喜欢
      • 2010-10-13
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多