Чувствительность к регистру в заголовочных файлах C ++ - PullRequest
5 голосов
/ 26 февраля 2012

Я полный нуб, когда дело доходит до C ++, и я взламывал Moai , пытаясь добавить поддержку геймпада Xbox 360 через XInput .Когда я включаю заголовок для XInput, есть две опции:

  1. XInput XInput

и

Xinput Xinput

Далее, чтобы использовать XInput, мне нужно включить windows.h.Все примеры, которые я видел, используют следующий синтаксис:

#include <windows.h>

Но при автозаполнении в Visual C ++ Express 2010 вставляется

#include <Windows.h>

Windows.h

Inв случае XInput / Xinput кажется, что чувствительность к регистру имеет значение, но в случае с Windows.h это не имеет значения.

Имеет ли значение регистр при включении заголовочных файлов?Есть ли в этом какая-то логика?

Разница XInput просто в том, что существует заголовок для чего-то, называемого XInput, и другого, называемого Xinput?

Ответы [ 4 ]

4 голосов
/ 26 февраля 2012

Это имеет значение, только если основная файловая система чувствительна к регистру. Файловая система Windows не чувствительна к регистру, но файловые системы операционных систем, таких как Linux. Попробуйте использовать точное фактическое имя реального файла, чтобы убедиться, что ваш код работает, если / когда вы переносите его с одной ОС на другую.

4 голосов
/ 26 февраля 2012

Чувствительность к регистру в именах заголовков и директивах include определяется реализацией. Обычно выясняется, зависит ли платформа, на которой вы строите, от регистра или нет.

Мне нужно проверить, чтобы убедиться, но я подозреваю, что если вы введете любой вариант xinput.h, он найдет тот, который появляется первым в путях поиска заголовка, даже если файл появится позже в путях поиска это лучшее совпадение с точки зрения кейса. Это было бы совершенно не интуитивно с точки зрения разработчика, не знакомого с этими проблемами, потому что это означало бы, что вы могли бы использовать одно из этих автозаполнений, и VS тогда включил бы файл , а не selected. *

Также возможно, что VS умнее этого и будет искать наилучшее совпадение.

2 голосов
/ 26 февраля 2012

В Windows имена файлов не чувствительны к регистру, и это распространяется на #include. Любой случай подойдет.

На некоторых платформах (например, Linux) имена файлов чувствительны к регистру, поэтому вам нужно будет сопоставить действительное имя файла.

1 голос
/ 26 февраля 2012

Windows не чувствительна к регистру, как говорили другие.Но это не твоя проблема.Ваша проблема с настройками включаемых файлов в Visual Studio.Компилятор будет искать стандартные заголовки (включение заголовков с использованием синтаксиса <>) в порядке их настройки.Запустите Tools->Options, а затем найдите Projects and Solutions->VC++ directories и просмотрите последовательность Include Files.

...