Чувствительность к регистру в заголовочных файлах C++
Я полный нуб, когда дело доходит до C++, и я взломал Moai, пытаясь добавить поддержку геймпада для Xbox 360 через XInput. Когда я включаю заголовок для XInput, есть две опции:
- XInput
а также
- Xinput
Далее, чтобы использовать XInput, мне нужно включить windows.h
, Все примеры, которые я видел, используют следующий синтаксис:
#include <windows.h>
Но автозаполнение в Visual C++ Express 2010 вставляет
#include <Windows.h>
В случае XInput/Xinput кажется, что чувствительность к регистру имеет значение, но в случае с Windows.h это не имеет значения.
Имеет ли значение регистр при включении заголовочных файлов? Есть ли в этом какая-то логика?
Разница XInput просто в том, что существует заголовок для чего-то под названием XInput
и еще что-то называется Xinput
?
4 ответа
Чувствительность к регистру в именах заголовков и директивах include определяется реализацией. Обычно выясняется, зависит ли платформа, на которой вы строите, от регистра или нет.
Я должен проверить, чтобы убедиться, но я подозреваю, что если вы введете любой вариант "xinput.h", он найдет тот, который появляется первым в путях поиска заголовка, даже если файл, который появляется позже в поиске пути лучше соответствуют с точки зрения случая. С точки зрения разработчика, не знакомого с этими проблемами, это было бы совершенно не интуитивно, поскольку это могло бы означать, что вы могли бы использовать одно из этих автозаполнений, и VS тогда включил бы не выбранный файл.
Также возможно, что VS умнее этого и будет искать лучшее совпадение.
Это имеет значение, только если основная файловая система чувствительна к регистру. Файловая система Windows не чувствительна к регистру, но файловые системы операционных систем, таких как Linux. Попробуйте использовать точное фактическое имя реального файла, чтобы убедиться, что ваш код работает, если / когда вы переносите его с одной ОС на другую.
В Windows имена файлов не чувствительны к регистру, и это распространяется на #include
, Любой случай подойдет.
На некоторых платформах (например, Linux) имена файлов чувствительны к регистру, поэтому вам нужно будет сопоставить действительное имя файла.
Окна не чувствительны к регистру, как говорили другие. Но это не твоя проблема. Ваша проблема с настройками включаемых файлов в Visual Studio. Компилятор будет искать стандартные заголовки (включение заголовков с использованием <>
синтаксис), в порядке их настройки. запуск Tools->Options
, а затем поиск Projects and Solutions->VC++ directories
и увидеть последовательность Include Files
,