Как заставить чувствительность к регистру препроцессора Visual Studio с помощью #include? - PullRequest
11 голосов
/ 14 июля 2009

Если у вас есть файл заголовка с именем ThisIsAHeaderFile.h, следующий файл все равно найдет файл в Visual Studio:

#include <ThisIsAheaderFile.h>

Есть ли способ обеспечить чувствительность к регистру, чтобы #include приводил к ошибке?

Ответы [ 5 ]

14 голосов
/ 14 июля 2009

Вы не можете, потому что файловая система Windows сама по себе нечувствительна к регистру.

Если бы вы могли попасть в ситуацию, когда у вас были и RICHIE.h, и richie.h, возможно, имеет смысл контролировать чувствительность к регистру, но вы не можете.

1 голос
/ 07 февраля 2014

Я хотел бы отметить, что это , а не неразрешимая проблема, так как многие пытаются указать на ОП. Нечувствительность к регистру не относится к делу. Дело в том, что Lorenz03Tx объясняет в комментарии, даже если файловая система нечувствительна к регистру, регистр сохраняется, поэтому им можно управлять.

Подобные меры противодействия действительно полезны при кроссплатформенной разработке и сильно мешают работе после того, как код скомпилирован для другой платформы. Не забывайте, что, делая процесс сборки более разборчивым, вы привели бы к улучшению привычек для разработчиков, так как они постепенно будут более последовательными в том, как они включают и называют файлы.

TL; DR

Одним из решений является использование сценария, который просто сканирует исходные файлы для операторов включения и пытается сопоставить их по путям включения. Такой сценарий может быть добавлен к событиям пост-сборки Visual Studio и, таким образом, запускаться при каждой сборке или (на основе krlmlr ) использовать препроцессор компилятора, который обеспечивает чувствительность к регистру.

1 голос
/ 25 марта 2013

Хотя это может быть невозможно реализовать в Visual Studio, можно реализовать быструю проверку, запустив только препроцессор в источнике C / C ++. Это будет выполнено достаточно быстро, чтобы быть практически осуществимым даже в качестве ловушки после фиксации в системе управления версиями, и будет ошибкой, если регистр в именах файлов не соответствует. Итак:

  • Сконфигурируйте систему сборки в Linux для поддержки прогонов только для препроцессора (-E с gcc / g++)

  • Реализация запуска только для препроцессора в качестве перехвата после фиксации, инициирующего раннее уведомление ответственного лица и / или кого-либо, желающего регулярно исправлять эти ошибки

Конечно, это предполагает, что VCS является центральным хранилищем для кода.

1 голос
/ 14 июля 2009

Возможно (раньше было?) Возможность создавать файлы с одинаковыми именами, но с разным регистром NTFS. Может быть, кто-то с Cygwin может проверить это.

* MSDN 1004 *

Однако даже в этом случае невозможно получить доступ более чем к одному из них одновременно из обычного приложения Windows.

0 голосов
/ 14 июля 2009

FAT и NTFS не чувствительны к регистру файловых систем. Foo и fOO - это один и тот же файл. Хотя ОС Windows сохранит дело, которое вы используете для файла. Если вы назовете файл ThisIsAheaderFile.h, он будет отображаться таким образом в файловой системе. Хотя все системные вызовы функций для открытия этого файла могут использовать любой корпус, какой они захотят.

...