Пока читаю "TCPL", вылезла загадка, пытаюсь объяснить, но не получается.
Смотрите изображение ниже: Страница 74 в "TCPL"
1. "getop.c"
и "stack.c"
включают "calc.h"
, а "getch.c"
нет.
Однако в "calc.h"
Он также объявляет функции int getch(void)
и void ungetch(int)
, определенные в "getch.c"
.
2. Программа работает корректно.
Мой вопрос: как заголовочный файл "calc.h"
создает соединение с исходным файлом "getch.c"
, а не include"..."
?
Определение функции также является объявлением. Таким образом, нет необходимости в «getch.c» явно объявлять getch
и ungetch
. По-прежнему рекомендуется включать «calc.h», чтобы убедиться, что определение в «getch.c» соответствует объявлениям, используемым в других c-файлах.
Если вы не вызываете функцию в единице перевода, вам не нужно ее объявлять. Поэтому, если вы не вызываете какие-либо функции, объявленные в «calc.h», из «getop.c» или «stack.c», вам не нужно включать «calc.h». Но ОЧЕНЬ хорошая идея сохранить включение, чтобы компилятор мог жаловаться, если определения не соответствуют объявлениям.
Это означает, что я также могу удалить
include"calc.h"
в «getop.c» и «stack.c» без каких-либо последствий?