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