Я знаю что есть правила использования подчеркивания в идентификаторы в C / C ++. Существуют ли правила их использования в именах файлов исходного кода?
Например, есть ли какие-либо ограничения в отношении начала или окончания имени файла с подчеркиванием? Или с подчеркиванием в качестве последнего символа перед .c
или же .h
расширение? Двойное подчеркивание?
Рекомендации приветствуются, если таковые имеются.
Если исходные файлы являются предметом препроцессора #include
директивы, затем стандарты C и C ++ определяют минимальный набор требований к имени файла. Стандарт C гласит:
6.10.2 Включение исходного файла
…
- Реализация должна обеспечивать уникальные отображения для последовательностей, состоящих из одной или нескольких недицифров или цифр (6.4.2.1), за которыми следует точка (.) И одна недисцифрованная цифра. Первый символ не должен быть цифрой. Реализация может игнорировать различия в алфавитном регистре и ограничивать сопоставление до восьми значащих символов перед периодом.
… где нецифровой содержит буквы A-Z, a-z и подчеркнуть.
Точно такой же текст (кроме номеров абзацев) также можно найти в стандарте C ++, 16.2 Включение исходного файла.
Помимо этого, то, что соответствует действительному имени файла, зависит от операционной системы, файловой системы, компилятора, компоновщика и других частей цепочки инструментов компиляции.
В наши дни я ожидаю, что большинство современных систем разрешат практически все, что не запрещено файловой системой напрямую.
Нет. Файлы могут быть названы так, как они хотят (учитывая, что базовая файловая система поддерживает имя) — ни C ++, ни стандарт C не заинтересованы в этом.
Да, есть правила «_» в идентификаторах, но они не распространяются на такие внешние вещи, как имена файлов.
Ни язык C, ни язык C ++ (и, пожалуйста, помните, что это два разных языка) не имеют правил для имен исходных файлов. Оба указывают имена для своих стандартных заголовков и следуют определенным соглашениям для этих имен, но эти соглашения не налагаются на другие исходные файлы. (Обратите внимание, что стандартные заголовки не обязательно даже реализованы в виде файлов.)
Операционная система, или файловая система, или компилятор, или какая-либо другая часть среды могут налагать некоторые требования.
В частности, Unix-подобные системы обычно разрешают любой символы в именах файлов, кроме '/'
(который является разделителем пути каталога) и '\0'
(который является ограничителем строки), и компиляторы обычно разрешают любое допустимое имя файла (возможно, обращая внимание на расширение, чтобы определить, какой язык компилировать). Windows запрещает некоторые другие символы. Чувствительность к регистру варьируется от одной системы к другой; foo.c
а также Foo.c
может или не может назвать тот же файл. Последнее может быть значительным для foo.c
против foo.C
; иногда .C
используется как расширение для исходного кода C ++. Используйте что-то еще, если ваш код может использоваться в файловой системе без учета регистра (Windows, MacOS).
Существует ряд соглашений для расширений файлов, используемых для идентификации содержимого исходного файла, таких как .c
для источника C, .h
для заголовочного файла, .cpp
или же .cc
или же .cxx
для исходного кода C ++ и так далее. Обратитесь к документации вашего компилятора.