预处理阶段&多个文件(基础知识)

时间:2013-02-03 07:14:53

标签: c c-preprocessor preprocessor-directive

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

第一个文件是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定义为myapp的最后一个文件? 我认为每个源文件分别进入预处理阶段和编译阶段。

1 个答案:

答案 0 :(得分:2)

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

预编译器预处理app.c时,仅检查SUM_H是否已在app.c内定义。这样可以避免sum.h仅通过此当前翻译单元中的不同标头多次包含sum.h。这是因为一旦定义了SUM_H,{{1}}就会被包含在内。