当我创建一个c ++头文件时,我声明头文件就像;
/*--- Pencere.h ---*/
#ifndef PENCERE_H
#define PENCERE_H
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我需要写下划线.
您不需要使用下划线,它只是一个分隔标题名称和扩展名的约定.您不能使用文字,.
因为它在标识符中无效,因此您可以使用有效的下划线替换它.
你实际上这样做的原因是作为一个包括守卫.该文件的全部内容如下:
#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.h
和diablo.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
这样的#define
和typedef
不被处理.
头文件到#define
名称的这种特定映射会在您拥有dir1/pax.h
和dir2/pax.h
使用它们的情况下发生故障PAX_H
.在这种情况下,你可以使用一个类似方案DIR1_PAX_H
,并DIR2_PAX_H
解决问题.
归档时间: |
|
查看次数: |
145 次 |
最近记录: |