#c
Помогите, пожалуйста, понять один из пунктов стандарта C11:
6.10.2 Source file inclusion
The implementation shall provide unique mappings for sequences consisting of one
or more nondigits or digits (6.4.2.1) followed by a period (.) and a single nondigit.
The first character shall not be a digit. The implementation may ignore distinctions
of alphabetical case and restrict the mapping to eight significant characters before
the period.
ISO/IEC 9899:2011
Правильно ли я понимаю, что:
Имя заголовочного файла не может начинаться с цифры;
После точки (.) может идти только один nondigit-символ (т. е. расширение заголовочного
файла может состоять только из одного символа);
Реализация может игнорировать регистр (маленькие и большие буквы);
Реализация может принимать во внимание только первые восемь символов до точки (т.
е. длина имени файла может быть ограничена восемью символами);
У меня возникли сомнения, потому что, по крайней мере, GCC 6.3.0 не соответствует
первому и второму пунктам.
Ответы
Ответ 1
Требования 6.10.2 распространяются на обе формы директивы #include - на форму с <> (включение заголовка) и на форму с "" (включение исходного файла). В первом случае последовательность символов между <> является именем заголовка. Стандартный термин заголовок (header) никак не привязан к файловой системе и в общем случае не является файлом вообще (реализация стандартных заголовков через буквальные файлы в файловой системе - не более чем простейший популярный подход, один из возможных). Раздел 6.10.2 просто описывает минимальные реализационные пределы, которые реализации обязаны поддерживать в отношении символьных последовательностей между <> и "". То есть требования 6.10.2 направлены в первую очередь на синтаксис и семантику конструкции #include и намеренно абстрагированы от свойств файловой системы настолько, насколько это возможно. В то же время, несмотря на концептуально различную интерпретацию <> и "" вариантов, разделения требований между ними не произведено: стандарт скорее всего просто признает тот факт, что в реальной жизни стандартные заголовки обычно реализуются как исходные файлы. Реальные реализации, конечно, будут предоставлять вам значительно более широкую свободу в выборе имен файлов и ограничивать себя требованиями 6.10.2 нет никакого смысла. Но в именовании заголовков стандартной библиотеки язык будет вынужден строго придерживаться очерченного в 6.10.2 минимума. Однако если вы ориентируетесь на формально-педантичную, злостно-занудную портабельность своего кода, то да, требования 6.10.2 следует соблюдать и вам тоже в именовании своих заголовочных файлов.
Комментариев нет:
Отправить комментарий