Использование определений в заголовочных файлах C? - PullRequest
0 голосов
/ 25 февраля 2012

В настоящее время я изучаю язык программирования C (пришедший из Java), и меня немного смущает вопрос определения макроса.

Чтобы другой код мог использовать макрос, он должен быть в заголовочном файле. Но если я определю макрос в заголовочном файле, то исходный файл не сможет его использовать. Должен ли я определить его в обоих файлах или я должен #include собственный файл заголовка исходного файла?

Ответы [ 3 ]

6 голосов
/ 25 февраля 2012

Во-первых, #include по сути похоже на прямую вставку файла в ваш файл. Он запускается препроцессором компилятора, который запускается до компилятора . Препроцессор Google C для получения дополнительной информации ...

Обычно настройка:

  #include "macros.h"

  ...

  printf("Macro value %d\n", MACRO_HERE(1) );

и в вашем заголовочном файле macros.h

  #ifndef MACROS_H_
  #define MACROS_H_

  #define MACRO_HERE( n ) ( n + 1 )

  #endif

Обернутые #ifdef (s) предотвращают переопределение макроса, если позже у вас есть другой файл включения, который также включает macro.h

Смотрите также: #pragma Once (который также широко используется во многих компиляторах)

6 голосов
/ 25 февраля 2012

Исходные файлы практически всегда включают в себя свой "собственный" заголовочный файл - т.е. заголовок, который объявляет функции, определенные в исходном файле.Объявление функции перед ее фактическим определением совершенно законно и часто желательно: вы можете получить ошибки компиляции, если заголовок случайно не соответствует, и это хорошо.

3 голосов
/ 25 февраля 2012

Вы можете определить его как в заголовке, так и в файле реализации, но он должен быть виден единице перевода, в которой вы его используете.

Если он используется только внутри одного файла реализации, определите его только в этом файле.

Если макрос использует больше файлов, определите его в заголовке и включайте этот заголовок везде, где вам нужен макрос.

...