1

我有三个文件,想编译它。

第一个文件是 app.c

#include"sum.h"
int main (void)
{
    sum();
    return 0;
}

第二个文件是 sum.h

#ifndef SUM_H
#define SUM_H
void sum ();
#endif

第三个文件 sum.c

#include"sum.h"
void sum ()
{
return;
}

我写下这些陈述:

#ifndef SUM_H
#define SUM_H
...
...
...
#endif

防止内容的多重定义sum.h

在编译期间app.c会进入预处理阶段然后sum.c进入预处理阶段我的问题当sum.c进入预处理器时如何知道SUM_Hmyapp的最后一个文件中定义的?我认为每个源文件分别进入预处理阶段和编译阶段。

4

1 回答 1

2

是的,每个文件都是单独编译的,因此包含防护仅防止在同一翻译单元中包含多个头文件, 而不是跨不同的翻译单元

app.c由预编译器预处理的时间仅检查是否已SUM_H在其中定义app.c。这避免了sum.h仅通过此当前翻译单元中的不同标题被多次包含。这是因为只要sum.h包含一次SUM_H就会被定义。

于 2013-02-03T07:37:56.380 回答