Не противоречит ли имя stdatomic.h (потенциальному) ограничению отображения до восьми значащих символов до точки?

ISO / IEC 9899:2011 (E):

6.10.2.5

Реализация может игнорировать различия в алфавитном регистре и ограничивать отображение до восьми значащих символов перед точкой.

Поскольку перед точкой стоит 9 символов, противоречит ли это (потенциальному) ограничению выше? Т.е. некоторые реализации не будут различать stdatomic.h и (например) stdatomix.h при использовании их в качестве аргумента #include директива?

2 ответа

Если вы используете #include <stdatomic.h>тогда должен быть включен заголовок библиотеки . Но делать то же самое (или нет) с #include <stdatomi.h> или же #include <stdatomix.h>

тем не мение #include <stdatom.h> следует рассматривать как другой файл.

Здесь нет настоящего противоречия. Просто забавное следствие.

Реализация может игнорировать различия в алфавитном регистре и ограничивать отображение до восьми значащих символов перед точкой.

Поскольку stdatomic.h содержит 9 символов до точки, противоречит ли он (потенциальному) ограничению выше?

Нет, потому что, хотя в нем используется слово «ограничение», это не ограничение языка или реализаций. Это свобода, предоставляемая реализациям.

Т.е. что некоторые реализации не будут различать stdatomic.h и (например) stdatomix.h при использовании их в качестве аргумента для директивы #include?

То, что реализация не делает различий между этими двумя, поскольку имена включаемых файлов никоим образом не нарушают ее соответствие. Стандарт определяет особое значение для директив include в форме

      #include <stdatomic.h>

. Пока реализация распознает эту директиву и придает ей требуемое значение, для стандарта не имеет значения, будет ли

      #include <stdatomix.h>

имеет такое же значение.

Дополнительный вопрос: почему stdatomic.h, а не atomic.h?

Это общепринятое соглашение, хотя и не соблюдаемое повсеместно, - добавлять к именам заголовков стандартных библиотек префикс "std". Другие примеры включают stdalign.h, stdarg.h, stdbool.h, stddef.h, stdint.h, stdio.h, stdlib.h и stdnoreturn.h. Я не уверен в политике комитета по этому поводу, но, безусловно, одним из эффектов является снижение вероятности того, что имя нового заголовка, добавленного в стандартную библиотеку, противоречит именам заголовков, используемых в существующих проектах.

Другие вопросы по тегам