Подтвердить что ты не робот

Как заставить чувствительность к препроцессору Visual Studio С#includes?

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

#include <ThisIsAheaderFile.h>

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

4b9b3361

Ответ 1

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

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

Ответ 2

Возможно, существует возможность создания файлов с тем же именем, но различий между случаями в NTFS. Возможно, кто-то из cygwin может это подтвердить.

MSDN

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

Ответ 3

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

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

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

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

Ответ 4

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

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

TL; DR

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

Ответ 5

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