Разрешено ли ANSI C-совместимой реализации включать в свою стандартную библиотеку дополнительные типы и функции, помимо перечисленных в стандарте? (Идеальный ответ - ссылка на соответствующую часть стандарта ANSI.)
Я спрашиваю, в частности, потому что Mac OS 10.7 объявляет функцию getline
в stdio.h даже при компиляции с помощью gcc или clang с использованием флага -ansi
. Это нарушает работу нескольких старых программ, которые определяют свои собственные getline
функции. Это ошибка Mac OS 10.7? (На странице руководства для getline
в Mac OS 10.7 говорится, что getline
соответствует стандарту POSIX.1, который появился в 2008 году.)
Изменить: Чтобы уточнить, мне кажется странным, что включение stdio.h в программу ANSI C89 в Mac OS 10.7 также включает объявление для функции getline
, поскольку getline
не является одной из функций, перечисленных в K&R (и, предположительно, ANSI) описание stdio.h. В частности, попытка скомпилировать noweb:
gcc -ansi -pedantic -c -o notangle.o notangle.c
In file included from notangle.nw:28:
getline.h:4: error: conflicting types for ‘getline’
/usr/include/stdio.h:449: error: previous declaration of ‘getline’ was here
Это ошибка в Mac OS 10.7, включающая объявление getline
в stdio.h даже при компиляции для стандарта ANSI C89?