我有三个文件,想要编译它。
第一个文件是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的最后一个文件?
我认为每个源文件分别进入预处理阶段和编译阶段。
答案 0 :(得分:2)
是的,每个文件都是单独编译的,因此仅包含防护防止多个头文件包含在同一个 translation unit 中,而不是跨越不同的翻译单元
预编译器预处理app.c
时,仅检查SUM_H
是否已在app.c
内定义。这样可以避免sum.h
仅通过此当前翻译单元中的不同标头多次包含sum.h
。这是因为一旦定义了SUM_H
,{{1}}就会被包含在内。