2012-02-24 3 views
0

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

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

+0

Спасибо за быстрый ответ всем! – bgroenks

ответ

6

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

+0

Спасибо! Я не был уверен, что исходный файл должен объявить свой собственный заголовок. – bgroenks

+0

@ ghostsoldier23 исходный файл не объявляет свой собственный заголовок. Ключевой концепцией является «единица перевода». Это то, что вы должны изучить в более глубоком понимании. Пожалуйста, не начинайте свой опыт C, веря в двойное имя файлов header/impl. Соглашается, иногда это случается, иногда это необязательно, но это не общее правило. –

+0

@ LuchianGrigore Я имел в виду включать не объявлять. Сожалею. Означает ли это заявление? – bgroenks

3

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

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

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

6

Первый #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) предотвратить макрос от переопределения, если у вас есть еще один файл include, который также включает macro.h

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

+1

Не используйте идентификаторы, начинающиеся с буквы «_ + заглавная буква», они зарезервированы для разработчиков языка. Кроме того, при использовании #include для включения собственных файлов используйте кавычки, < > используются для файлов системных заголовков. Кроме того, пример хорош. +1 – Lindydancer

+0

@ Lindydance - спасибо, хорошая точка. – EdH