включая заголовочный файл - PullRequest
1 голос
/ 02 октября 2010

У меня есть вопрос о файлах заголовков (я говорю о c, но я думаю, что это будет то же самое для c ++), давайте предположим, что у меня есть некоторый файл my_ADT.c (внутри у меня есть реализация функций и фактический struct) а также my_ADT.h внутри у меня pointer for my struct Question: если я использую ADT Set для реализации my_ADT нужно ли включать set.h в оба файла my_ADT.h and my_ADT.c или достаточно включить только в my_ADT.h (внутри my_ADT.c у меня есть #include "my_ADT.h") заранее спасибо

Ответы [ 3 ]

3 голосов
/ 02 октября 2010

Есть 3 сценария

  1. set.h требуется ТОЛЬКО в my_ADT.h
  2. set.h требуется ТОЛЬКО в my_ADT.c
  3. set.h требуется как в my_ADT.h, так и в my_ADT.c
  4. set.h вообще не требуется: -)

Для сценария 3) добавьте #include "set.h" к файлу my_ADT.h, документ, подтверждающий факт , и #include "my_ADT.h" в my_ADT.c (при правильном включении охранников вы ничего не потеряете, включив set.h также в файл C).

Для сценария 2) включить set.h только в my_ADT.c

Для сценария 1) включить set.h только в my_ADT.h

1 голос
/ 02 октября 2010

Если my_ADT.h включено в файл my_ADT.c, то вы должны включить set.h только в my_ADT.h.

0 голосов
/ 04 октября 2010

В зависимости от ответа на pmg вы должны знать, что хорошим способом избежать проблемы #include является окружение всего заголовочного файла инструкцией прекомпилятора, которая проверяет, был ли файл .h уже включен.

#ifndef __my_ADT_header
#define __my_ADT_header
/*
 * your header declaration here
 */
#endif

это предотвращает ошибку, вызванную включением нескольких заголовков

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...