Требуется ли поддержка Приложения K в C11 для соответствующей реализации?
При ответе на вопрос, который использовал некоторые функции (sscanf_s
а также sprintf_s
) что я думал, что это не стандарт C, Даниэль Фишер обратил мое внимание на то, что соответствующие функции определены в Приложении K.
Я вообще понимаю, что нормативные средства помогают определить стандарт. Но приложение к стандарту C традиционно рассматривается только как информативное. Приложение K помечено как нормативное в Стандарте C11. Он определяет "безопасные" функции.
Означает ли это, что компилятор, который не предоставляет эти функции, не соответствует стандарту C11?
У меня есть только проект стандарта C11, но в нем говорится, что Приложение K является нормативным, но в разделе библиотеки стандарта не упоминаются функции, обсуждаемые в Приложении K. Кажется, что примечание в определении ограничения времени выполнения подразумевает Приложение K определяет расширение.
Разве нормативное приложение определяет только дополнительное расширение?
2 ответа
Приложение K не является обязательным; это говорит само за себя.
См. Пункт K.2:
Реализация, которая определяет
__STDC_LIB_EXT1__
должны соответствовать спецификациям в этом приложении.
со сноской:
Реализации, которые не определяют
__STDC_LIB_EXT1__
не обязаны соответствовать этим спецификациям.
И параграф 3 говорит:
Подпункт K.3 должен читаться так, как если бы он был объединен в параллельную структуру именованных подпунктов пункта 7.
вот почему нет необходимости упоминать это в разделе библиотеки, пункт 7 (или, по крайней мере, авторы стандарта не считают это необходимым).
Реализация, которая определяет __STDC_LIB_EXT1__
должен определить это как 201112L
; и N1570, и выпущенный стандарт C11 ошиблись, но это было исправлено в Техническом исправлении.
Это "нормативно" в том смысле, что реализация, претендующая на поддержку Приложения K, должна соответствовать содержащимся в нем требованиям. Это не обязательно.