C 预处理阶段&;多文件(基础)

C 预处理阶段&;多文件(基础),c,c-preprocessor,preprocessor-directive,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 ... ... ... #

我有三个文件,想编译它

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

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

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