Как принудительно настроить чувствительность препроцессора Visual Studio к регистру с помощью #includes?
Если у вас есть файл заголовка с именем ThisIsAHeaderFile.h, следующее все равно найдет файл в Visual Studio:
#include <ThisIsAheaderFile.h>
есть ли способ обеспечить чувствительность к регистру, чтобы #include
приведет к ошибке?
5 ответов
вы не можете, потому что файловая система Windows сама не учитывает регистр.
Если бы вы могли попасть в ситуацию, когда у вас были оба Ричи.H и Ричи.ч., возможно, имеет смысл контролировать чувствительность к регистру, но вы не можете.
Это (раньше были?) возможно создание файлов с одинаковым именем, но с различиями в NTFS. Возможно, кто-то с cygwin может это подтвердить.
даже тогда, однако, невозможно получить доступ более чем к одному из них одновременно из обычного приложения Windows.
хотя это может быть невозможно применить из Visual Studio, можно реализовать быструю проверку, запустив только препроцессор на источнике C/C++. Это будет работать достаточно быстро, чтобы быть практичным даже в качестве крючка после фиксации в системе управления версиями и ошибаться, если случай в именах файлов был несоответствующим. Итак:
настройте свою систему сборки в Linux для поддержки только препроцессоров (
-E
сgcc
/g++
)реализовать препроцессор-только запустить как крюк после фиксации, вызывая раннее уведомление ответственного лица и / или кого-то, кто готов регулярно исправлять эти ошибки
конечно, это предполагает VCS в качестве центрального хранилища для кода.
Я хотел бы отметить, что это не неразрешимая проблема, как многие пытаются указать на OP. Нечувствительность к делу не имеет значения. Дело в том, что Lorenz03Tx объясняет в комментарии, даже если файловая система нечувствительна к регистру, случай сохраняется, поэтому его можно контролировать.
такие встречные меры действительно здорово иметь при выполнении кросс-платформенной разработки и предотвращает много после работы, когда код компилируется для другая платформа. Не забывайте, что, делая процесс сборки более придирчивым, вы вызовете лучшие привычки для разработчиков, поскольку они постепенно будут более согласованными, как они включают и называют файлы.
TL; DR
одним из решений является использование скрипта, который просто сканирует исходные файлы для операторов include и пытается сопоставить их вдоль путей include. Такой сценарий можно добавить в события Visual studio после сборки и, таким образом, запускать при каждой сборке или (вдохновленный krlmlr) используйте препроцессор компилятора, который обеспечивает чувствительность к регистру.
FAT и NTFS являются файловыми системами, нечувствительными к регистру. Foo и fOO-это один и тот же файл, насколько это касается их. Хотя ОС Windows сохранит случай, который вы используете для файла. Если вы назовете файл ThisIsAheaderFile.h он будет отображаться таким образом в файловой системе. Хотя все вызовы системных функций для открытия этого файла могут использовать любой корпус, который они хотят.