Этап предварительной обработки и несколько файлов (основы)

У меня есть три файла, и я хочу их скомпилировать.

Первый файл 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? Я думаю, что каждый исходный файл проходит этап предварительной обработки и этап компиляции индивидуально.


person user2036586    schedule 03.02.2013    source источник


Ответы (1)


Да, каждый файл компилируется отдельно и, следовательно, включает только защитные элементы предотвращает многократное включение файла заголовка в один и тот же единица перевода а не между разными единицами перевода.

Когда app.c предварительно обрабатывается прекомпилятором, только проверяет, определено ли уже SUM_H только в app.c. Это позволяет избежать многократного включения sum.h через разные заголовки только в этой текущей единице перевода. Это связано с тем, что как только sum.h будет включено, сразу будет определено SUM_H.

person Alok Save    schedule 03.02.2013