Что говорит стандарт?
Чувствительность к регистру в директивах #include
контролируется реализацией (компилятор / препроцессор). Это объясняется в 16.2.2 [cpp.include]:
Директива предварительной обработки вида
# include < h-char-sequence> new-line
ищет последовательность мест, определенных реализацией, для заголовка, уникально идентифицированного указанной последовательностью между разделителями <
и >
, и вызывает замену этой директивы всем содержимым заголовка. Способ определения мест или определения заголовка определяется реализацией.
Аналогично, 16.2.3 [cpp.include]:
Директива предварительной обработки вида
# include " q-char-sequence" new-line
вызывает замену этой директивы всем содержимым исходного файла, идентифицируемого указанной последовательностью между разделителями "
. Именованный исходный файл ищется в соответствии с реализацией. Если этот поиск не поддерживается или поиск не удался, директива обрабатывается повторно, как если бы она читала
# include < h-char-sequence> new-line
с идентичной содержащейся последовательностью (включая >
символов, если таковые имеются) из исходной директивы.
Естественным выбором для реализации языка является использование чувствительности к регистру файловой системы или ОС, но строгого требования для этого нет (как предполагают все другие ответы).
Как лучше всего сохранять все имена файлов / папок строчными и, следовательно, делать то же самое при включении?
Лучшая практика, как всегда: придерживайтесь последовательности. Если вы используете в своем проекте исходные / заголовочные файлы в смешанном регистре, продолжайте использовать их и копируйте точный регистр в директивах #include
.