В чем разница между включением файла .c и файла .h

Во многих случаях, когда я смотрю код других людей, я вижу, что некоторые из них включают в себя файл .h, а некоторые — файл .c / .cpp. В чем разница?

5

Решение

Это зависит от того, что находится в файле (ах).

#include Директива препроцессора просто вставляет указанный файл в этот момент в исходный файл.

Так что же актуально компилятор этап (который работает после препроцессор) видит результат всех этих вставок.

Заголовочные файлы обычно разрабатываются и предназначены для использования через #include, Исходных файлов нет, но иногда это имеет смысл. Например, когда у вас есть C-файл, содержащий только определение и инициализатор:

const uint8_t image[] = { 128, 128, 0, 0, 0, 0, ... lots more ... };

Тогда имеет смысл сделать это доступным для некоторого фрагмента кода, используя #include, Это файл C, так как на самом деле определяет (не просто объявляет) переменную. Возможно, он хранится в своем собственном файле, поскольку изображение преобразуется в источник C из какого-либо другого формата (изображения), используемого для редактирования.

7

Другие решения

.h файлы называются заголовочными файлами, они не должны содержать никакого кода (если только он не содержит информацию о шаблонном объекте C ++). Обычно они содержат прототипы функций, операторы typedefs, #define, которые используются исходными файлами, которые их содержат. Файлы .c являются исходными файлами. Как правило, они содержат реализацию исходного кода функций, которые были созданы в соответствующем заголовочном файле.

Источник- http://cboard.cprogramming.com/c-programming/60805-difference-between-h-c-files.html

2

Вы можете посмотреть на сайте GCC (https://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html) который сообщает хорошее резюме всех расширений, которые вы можете использовать в C / C ++:

Исходные файлы C ++ обычно используют один из суффиксов ‘.C’, ‘.cc’, ‘.cpp’, ‘.CPP’, ‘.c ++’, ‘.cp’ или ‘.cxx’; Заголовочные файлы C ++ часто используют «.hh», «.hpp», «.H» или (для общего кода шаблона) «.tcc»; и предварительно обработанные файлы C ++ используют суффикс «.ii». GCC распознает файлы с этими именами и компилирует их как программы на C ++, даже если вы вызываете компилятор так же, как и для компиляции программ на C (обычно с именем gcc).

1

Включение заголовочного файла с объявлениями является основным, рекомендуемым и используемым практически везде, методом создания согласованных объявлений в проекте. Включение другого исходного файла — это другой (очень редкий) тип зверя, и он полезен и возможен при определенных условиях:

  1. Существует причина разделить код на отдельные исходные файлы, несмотря на то, что он должен быть скомпилирован как единый модуль. Например, существуют разные версии некоторых функций, которые не будут видны из других модулей. Итак, они объявлены static но какая версия включена, регулируется параметрами компиляции. Другой вариант — проблемы с размером и / или обслуживанием.
  2. Включенный файл не компилируется сам по себе как модуль проекта. Таким образом, его экспортированные определения не конфликтуют с модулем, в который включен файл.

Здесь я использовал термины определение а также декларация таким образом, что следующие являются декларациями:

extern int qq;
void f(int);
#define MYDATATYPE double

и следующие определения:

int qq; // here, the variable is allocated and exported
void f(int x) { printf("%d\n", x); } // the same for function

(Кроме того, объявления включают методы C ++ с телами, объявленными внутри определения их класса.)

Во всяком случае, дело другое .c / .cxx / etc. Файл, включенный в исходный файл, очень запутан и его следует избегать до самой реальной необходимости. Иногда для таких файлов используется определенный суффикс (например, .tpl), чтобы избежать путаницы читателя.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector