2012-04-27 1 views
16

Этот вопрос может показаться глупым. Но я хотел бы знать, почему мы используем «.hh» как расширение для файлов заголовков C++ вместо использования только «.h».C++: Причина использования «.hh» в качестве расширения для файлов заголовков C++

Файлы заголовков предварительно обработаны, и препроцессор даже не заботится о расширении файла заголовка. Таким образом, даже я создаю заголовочный файл с расширением «.qwe» (test.qwe). Тогда зачем использовать «.hh» как расширение для файлов заголовков C++.

Некоторые говорят, что мы используем «.cc» как расширение для файлов C++, чтобы отличать от файлов C (с расширением «.c»), также мы используем «.hh» как расширение для файлов заголовков C++ для отличия от файлов заголовков C (с расширением «.h»). Я не думаю, что это действительная причина.

Кто-нибудь знает причину именования таким образом.

+4

Это просто соглашение, которое некоторые люди используют для разделения заголовков, предназначенных для программ на C++, из заголовков, предназначенных для программ на C. Не более того. Независимо от того, действительно ли это в значительной степени сводится к религиозным войнам, подобным аргументам размещения фигур. –

+0

См. Также http://stackoverflow.com/q/5122728/716443. Для некоторых компиляторов может быть ключом к тому, что ваш заголовок предназначен для Objective C++. – DavidO

+1

'.hpp' - популярный выбор для заголовков C++, но я просто использую' .h' и '.cpp'. Это в основном личные предпочтения. – AJG85

ответ

25

Некоторые говорят, что мы используем «.cc» в качестве расширения для C++ файлов, чтобы отличить от файлов C (который имеет расширение «.c»), также мы используя «.hh» в качестве расширения для файлов заголовков C++, чтобы отличать от файлов заголовков C (которые имеют расширение «.h»).

Именно по этой причине. Это просто, чтобы отличать заголовки CPP от заголовков C.

Некоторые программисты и библиотеки, такие как Boost, используют .hpp для заголовков CPP. Мой личный выбор таков:

  • example.c
  • example.cpp
  • example.h
  • example.h ++

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

5

Вы можете назвать свои заголовки по своему усмотрению, они даже не имеют расширения.

This FAQ упоминает соглашения об именах заголовков.

1

Это не по какой-либо конкретной причине, это просто соглашение, связанное с разработчиком или проектом. Поскольку «расширение файла» - это просто часть имени, это не имеет большого значения, поскольку исходные файлы - это просто текстовые файлы. Кроме того, файлы заголовков просто копировать-вставить в файл, который включал их (через #include, поэтому расширение файла означает, даже меньше для них.

Библиотеки Борланд заголовки были .hpp расширение. С ++ стандартные заголовки библиотек s не имеют расширения вообще. Это просто условны и личного вкуса.

1

Это полностью соглашение, для этого нет особых причин. Обычно люди стараются оставаться последовательными в рамках проекта, или между командами или даже всей компанией. Это помогает разработчикам, которые забирают ваш код после того, как вы уже давно поняли, что вы abc.hh идут с файлом abc.cc, а abc.h идет с abc.c.

1

Одна из причин, что если я создаю dll, у которого есть C API вокруг кучи кода C++, мне нужно провести различие между моими заголовками C, которые клиент может использовать для импорта функций C и моих внутренних заголовков C++, которые я явно не хотят разрешать клиенту импортировать.

Связывание с функцией C довольно просто с большинства языков/сред, практически без накладных расходов. Вам не нужно думать обо всех сложностях, наследуемых на C++. Поэтому, если бы я работал с такой библиотекой, я бы обязательно отделил свой C++ от моего интерфейса C.

1

Я думаю, что это в основном социальное соглашение.

Однако недавние GCC компиляторы способны составить (один) заголовок foo.hh или foo.h в нечто вроде foo.hh.gch или foo.h.gch, который по существу содержит постоянную память кучу образ компилятора (программа cc1plus запускается g++) после того, как она анализируется этот заголовок.

Обратите внимание, что стандартная библиотека C++ 11 определяет заголовочные файлы, например, например. <vector> без какого-либо расширения.