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*/