Заголовочные файлы .h и .H в g ++ - PullRequest
0 голосов
/ 04 июня 2009

Я использую g ++ в Ubuntu с библиотекой C ++, заголовочные файлы которой заканчиваются на .H вместо традиционного .h.

Я бы предпочел не изменять каталог include ... в противном случае я, вероятно, просто создал бы символические ссылки на .h версии заголовков.

Мне интересно, существует ли простой способ автоматического распознавания g ++, что файлы .H и .h одинаковы, чтобы я мог написать в своей программе header.h или header.H? Я просмотрел справочную страницу g ++, но мне довольно сложно сказать, поддерживает ли она какую-то функцию, подобную этой.

Ответы [ 5 ]

7 голосов
/ 04 июня 2009

.H - это один из способов, которым заголовочные файлы C ++ имеют разные имена из заголовочных файлов C (также .hpp или .hxx). Это работает только в чувствительных к регистру ОС.

Если файл имеет .H, просто #include <file.H>

3 голосов
/ 04 июня 2009

Проблема связана с файловой системой. Ваша файловая система чувствительна к регистру и, следовательно, видит разницу между header.h и header.H. Это не проблема G ++. При работе в нечувствительной к регистру файловой системе / ОС вы не увидите этой проблемы, как в случае запуска g ++ в системе win32.

2 голосов
/ 05 июня 2009

Я не могу придумать какой-либо простой способ заставить gcc стать нечувствительным к регистру, поэтому вам, возможно, придется стиснуть зубы и использовать альтернативное решение, такое как

#include "foo.H"

... или создайте несколько символических ссылок:

# create .h links to all .H files below the current dir
for basename in `find . -name *.H | sed 's/\(.*\)\..*/\1/'`; do
  ln -s $basename.H $basename.h
done

К вашему сведению, в списке рассылки gcc есть недавняя ветка с запросом нечувствительности к регистру . Ответы в основном касаются эффективности - если вы начнете просить компилятор искать все версии "foo.h" (например, "FOO.H", "Foo.H", "foo.H"), то вы быть доступ к диску гораздо чаще. А кому нужно еще больше времени на сборку? :)

2 голосов
/ 04 июня 2009

Если вы не хотите переименовывать файлы заголовков или имеете исходные файлы #include .H, вы можете создать набор файлов .h, которые просто #include соответствующим файлом .H.

2 голосов
/ 04 июня 2009

Я думаю, что это деталь реализации файловой системы Linux. В то время как в Windows файлы .h и .H фактически одинаковы, в Linux вы можете иметь традиционный .h и традиционный .H в одном каталоге.

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

...