tl; dr: Возможность выполнения определенных операций, таких как сравнение указателей, без учета времени жизни идентифицированных объектов, является популярным расширением, которое подавляющее большинство компиляторов можно настроить для поддержки с отключенными оптимизациями.Однако его поддержка не является обязательной для Стандарта, и агрессивные оптимизаторы могут нарушать код, который на него опирается.
Когда был написан Стандарт, существовало несколько платформ с сегментированной памятью, где пытались загрузитьуказатель на регистры приведет к тому, что система получит информацию об области памяти, в которой находится указатель.Если такая информация больше недоступна, попытка ее получения может иметь произвольные последствия за пределами юрисдикции Стандарта.Если бы стандарт требовал, чтобы сравнения, включающие такие указатели, не имели побочных эффектов, кроме уступки 0 или 1, это сделало бы язык непрактичным на таких платформах.
Хотя авторы стандарта, без сомнения, знали, что возможность использоватьСравнение с произвольными указателями (при условии, что результаты могут быть не особенно значимыми) было полезной функцией, поддерживаемой каждой реализацией, нацеленной на обычное оборудование, они не видели необходимости рассматривать ее как нечто большее, чем «популярное расширение», которое поддерживают реализации качества.всякий раз, когда это будет полезно и практично.
Из Обоснования C89, стр.11 строка 23:
Термины неопределенное поведение, неопределенное поведение и поведение, определяемое реализацией, используются дляклассифицировать результаты написания программ, свойства которых Стандарт не описывает или не может полностью описать.Цель принятия этой категоризации состоит в том, чтобы обеспечить определенное разнообразие среди реализаций, которое позволяет качеству реализации быть активной силой на рынке, а также разрешить определенные популярные расширения, не удаляя кэш соответствия стандарта.В информативном Приложении J к Стандарту приводится каталог поведения, подпадающего под одну из этих трех категорий.
К сожалению, хотя почти все платформы, используемые сегодня, могут поддерживать такую семантику практически без затрат, некоторые авторы компиляторов считают, чтоих желание предположить, что код никогда не будет делать что-либо с освобожденными указателями, более важными, чем любое значение, которое программисты могли бы получить от того, что было по существу универсально поддерживаемым расширением на обычных платформах.Если никто не может гарантировать, что любой, использующий свой код, отключит фальшивые «оптимизации», навязанные авторами чрезмерно активных оптимизаторов, которые стремятся избавить язык от полезных расширений, возможно, придется написать дополнительный код, чтобы обойти отсутствие таких расширений..