在创建 C++ 头文件时,我将头文件声明为;

/*--- Pencere.h ---*/
#ifndef PENCERE_H
#define PENCERE_H

我想知道为什么我需要写下划线。

最佳答案

您不需要使用下划线,它只是分隔标题名称和扩展名的约定。您不能使用文字 .,因为它在标识符中无效,因此您可以将其替换为有效的下划线。

你实际这样做的原因是作为一个包含守卫。文件的全部内容类似于:

#ifndef PENCERE_H
    #define PENCERE_H
    // Your stuff goes here.
#endif

这样,如果您不小心将其包含两次:
#include "pencere.h"
#include "pencere.h"

您不会复制其中的所有内容。双重包含通常比这更微妙 - 例如,您可以在代码中包含 pax.hdiablo.h 并且 pax.h 也出于其目的而包含 diablo.h:
main.c:
    #include "pax.h"
    #include "diablo.h"
    // Other stuff

pax.h:
    #ifndef PAX_H
        #define PAX_H
        #include "diablo.h"
        // Other stuff
    #endif

diablo.h:
    #ifndef DIABLO_H
        #define DIABLO_H
        typedef int mytype;
    #endif

在这种情况下,如果包含守卫不存在,您将尝试在程序中编译 typedef int mytype; 行两次。一次用于 main.c -> pax.h -> diablo.h ,再次用于 main.c -> diablo.h

使用包含守卫,当 DIABLO_H 包含 main.c 时定义预处理器符号 diablo.h,因此不处理 #definetypedef

在您有 #definedir1/pax.h 的情况下,头文件到 dir2/pax.h 名称的这种特殊映射会失效,因为它们都使用 PAX_H 。在这种情况下,您可以使用 DIR1_PAX_HDIR2_PAX_H 之类的方案来解决问题。

关于c++ - 为什么 headerFileName_H,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3298652/

10-16 04:32