Много раз, когда я смотрю код других людей, я вижу, что некоторые из них включают файл .h, а некоторые включают файл .c / .cpp. В чем разница?
В чем разница между включением файла .c и файла .h
Ответы (4)
Это зависит от того, что находится в файле (ах).
Директива препроцессора #include
просто вставляет указанный файл в этот момент в исходный файл.
Итак, то, что видит фактический этап компилятора (который запускается после препроцессора), является результатом всей этой вставки.
Заголовочные файлы обычно разрабатываются и предназначены для использования через #include
. Исходных файлов нет, но иногда это имеет смысл. Например, если у вас есть файл C, содержащий только определение и инициализатор:
const uint8_t image[] = { 128, 128, 0, 0, 0, 0, ... lots more ... };
Тогда имеет смысл сделать это доступным для некоторого фрагмента кода с помощью #include
. Это файл C, поскольку он на самом деле определяет (а не просто объявляет) переменную. Возможно, он хранится в собственном файле, поскольку изображение конвертируется в исходный код C из какого-либо другого (изображения) формата, используемого для редактирования.
static
прототипов функций, они не являются общедоступными.
- person unwind; 25.08.2014
Файлы .h называются заголовочными файлами, они не должны содержать никакого кода (если только он не содержит информацию о шаблонном объекте C ++). Обычно они содержат прототипы функций, typedefs, операторы #define, которые используются исходными файлами, которые их включают. Файлы .c являются исходными файлами. Обычно они содержат реализацию исходного кода функций, которые были прототипированы в соответствующем файле заголовка.
Источник: http://cboard.cprogramming.com/c-programming/60805-difference-between-hc-files.html
вы можете посетить веб-сайт 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).
Включение файла заголовка с объявлениями - это основной, рекомендуемый и используемый практически повсюду метод создания согласованных объявлений в проекте. Включение другого исходного файла - это еще один (очень редкий) вид зверя, и он полезен и возможен при определенных условиях:
- Есть причина разделить код на отдельные исходные файлы, несмотря на то, что он должен быть скомпилирован как единый модуль. Например, есть разные версии некоторых функций, которые не видны из других модулей. Итак, они объявлены
static
, но какая версия включена, регулируется параметрами компиляции. Другой вариант - это проблемы с размером и / или учетными данными для обслуживания. - Включенный файл не компилируется сам по себе как модуль проекта. Таким образом, его экспортированные определения не конфликтуют с модулем, в который включен файл.
Здесь я использовал термины определение и объявление так, как следующие являются объявлениями:
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), чтобы не запутать читателя.
.h
содержат объявления функций и т. Д., А файлы.cpp
содержат определения (которые вам не нужно видеть для вызова функции). Это довольно странно для#include
.cpp
файла. - person BoBTFish   schedule 25.08.2014