Вот пример кода:
#include <ctype.h>
int main(void)
{
isalpha("X");
}
Мой вопрос: Является ли этот код нарушением ограничения? Эквивалентно, является ли внедрение несоответствующим, если он не выдает диагностику?
Мотивация. Несколько основных компиляторов не предупреждают об этом коде, даже в соответствии с кодом. C11 6.5.2.2/2 описывает, что передача char *
функции с прототипом, ожидающим int
является нарушением ограничения.
Однако мне непонятно, могут ли положения в 7.1.4 разрешить библиотечную функцию дополнительно определять как макрос, заменяя требование 6.5.2.2/2. Сноска 187 предполагает, что макрос скрывает прототип, но сноски являются ненормативными.
Код (isalpha)("X");
конечно, дает диагностику.