Не противоречит ли имя 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
. Я не уверен в политике комитета по этому поводу, но, безусловно, одним из эффектов является снижение вероятности того, что имя нового заголовка, добавленного в стандартную библиотеку, противоречит именам заголовков, используемых в существующих проектах.