为什么headerFileName_H

zib*_*bib 4 c++

当我创建一个c ++头文件时,我声明头文件就像;

/*--- Pencere.h ---*/
#ifndef PENCERE_H
#define PENCERE_H
Run Code Online (Sandbox Code Playgroud)

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

pax*_*blo 6

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

你实际上这样做的原因是作为一个包括守卫.该文件的全部内容如下:

#ifndef PENCERE_H
    #define PENCERE_H
    // Your stuff goes here.
#endif
Run Code Online (Sandbox Code Playgroud)

所以,如果你不小心包括它两次:

#include "pencere.h"
#include "pencere.h"
Run Code Online (Sandbox Code Playgroud)

你不会得到重复的一切.双夹杂物通常比这更微妙的-例如,您可以包括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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果没有包含警卫,你会尝试在程序中编译typedef int mytype; 两次.一次main.c -> pax.h -> diablo.h又一次main.c -> diablo.h.

与包括防护装置,预处理器符号DIABLO_H定义为当main.c包括diablo.h这样的#definetypedef不被处理.

头文件到#define名称的这种特定映射会在您拥有dir1/pax.hdir2/pax.h使用它们的情况下发生故障PAX_H.在这种情况下,你可以使用一个类似方案DIR1_PAX_H,并DIR2_PAX_H解决问题.