Per 7.5,
[errno] расширяется до модифицируемого lvalue175), который имеет тип int, значение которого устанавливается на число положительных ошибок несколькими библиотечными функциями. Не указано, является ли errno макросом или идентификатором, объявленным с внешней связью. Если определение макроса подавлено для доступа к фактическому объекту или программа определяет идентификатор с именем errno, поведение undefined.
175) Макрос errno не обязательно должен быть идентификатором объекта. Он может расширяться до изменяемой lvalue, вызванной вызовом функции (например, * errno()).
Мне не ясно, достаточно ли этого, чтобы &errno
не было нарушением ограничения. Язык C имеет lvalues (например, переменные типа register-storage-class, однако они могут быть только автоматическими, поэтому errno
не может быть определено как таковой), для которых оператор &
является нарушением ограничения.
Если &errno
является законным C, требуется ли постоянное?