C 包括某事
我在C 包括某事,c,C,我在main.c #include "config.h" #include "util.h" 在config.h #include "util.h" 在util.h 由于我已经两次包含util.h,我认为它应该是错误的 但不幸的是,当我键入:gcc main.c config.c util.c 为什么这样做是正确的?C标头通常具有标头防护装置,以防止它们被多次包含。例如: #include <stdio.h> #include <stdio.h> // multip
main.c
#include "config.h"
#include "util.h"
在config.h
#include "util.h"
在util.h
由于我已经两次包含util.h,我认为它应该是错误的
但不幸的是,当我键入:gcc main.c config.c util.c
为什么这样做是正确的?C标头通常具有标头防护装置,以防止它们被多次包含。例如:
#include <stdio.h>
#include <stdio.h> // multiple inclusion of stdio.h, that's fine
它不应该导致错误 如果您有下一个文件: inc.h,inc1.h和inc.h包括inc1.h和inc1.h包括inc.h,那么它是错误的原因 在头文件中,达成以下协议:
#ifndef HEADER_NAME_H
#defiene HEADER_NAME_H
//body of header file
#endif /*HEADER_NAME_H*/
其中HEADER_NAME_H是“HEADER_NAME.H”filename作为旁白:声明相同的函数或定义相同的宏两次都不是问题,但不允许重新声明
typedef
。所以页眉保护并不总是必要的(只是为了解释为什么没有出现错误,当然不是为了建议省略页眉保护)。明白了,还有一个问题,是否有必要给每个#INCLUDE一个页眉保护?您的意思是保护#INCLUDE
指令本身吗?再看一遍答案,头文件是受保护的(因此您不必在意何时将它们包括在内)。通常这是通过所有头文件完成的;例外情况是,出于某种原因需要多个包含。例如,
就是这样一个头文件,或者如果你使用预处理器进行模板制作。“头文件是受保护的”你是说#include
默认情况下是受保护的,所以我不需要编写ifndef
?对不起,我真的不明白你的问题。您通常在每个标题中都有带有#ifndef
的防护装置,并且#include
s没有任何防护装置。是否需要给每个#include标题防护装置?
#ifndef HEADER_NAME_H
#defiene HEADER_NAME_H
//body of header file
#endif /*HEADER_NAME_H*/