Как это опровергается? Относится ли «указатель на тот же объект» к
адреса, даже если там нет объектов
Нет, я не думаю, что это было бы правдоподобным чтением. Если вы указываете, что значение указателя не является указателем на объект (и если это не нулевой указатель), то сравнение на равенство этого значения (указателя) с самим собой не удовлетворяет условию «только если» в 6.5.9 / 6, и, следовательно, сравнение должно оцениваться до 0.
Но не так быстро. Кто сказал, что (struct A *) 1
не является указателем на объект?
Рассмотрим определение в стандарте «объект»:
объект
область хранения данных в среде исполнения, содержимое
который может представлять значения
( C 2011, 3,15 / 1 )
Обратите внимание, что определение по сути не ограничено объектами, которые выделены или объявлены программой. Насколько мне известно, стандарт нигде не ограничивает область действия термина таким образом. Он определяет средства для выделения объектов, но не указывает, что объекты, выделенные одним из этих способов, являются единственными, которые существуют. Таким образом, реализации могут свободно интерпретировать это значение указателя как указатель на объект, и в этом случае сравнение на равенство может оценить как 1.
Это также может все равно не оценивать как 1, поскольку, несмотря на то, что два указателя (предположительно) имеют битовые идентичные представления, они не обязательно считаются указателями на один и тот же объект.
(не так, как мог компилятор
в любом случае)?
Конечно, компилятор может и должен знать. Он должен знать, чтобы оценить выражения, которые вы представляете. Самый простой подход - и, не случайно, самый распространенный - состоит в том, чтобы интерпретировать каждое ненулевое значение указателя, которое не является представлением ловушки, как указатель на объект.
Должны ли мы просто понимать, что это
реализация, так как предыдущие результаты уже были
от реализации
Будучи определяемым реализацией, предъявляется требование соответствия реализаций для документирования их выбора Поведение, о котором вы спрашиваете, может следовать из определяемого реализацией поведения преобразования целого числа в указатель, но само по себе оно не определяется реализацией.
Где это указано в стандарте?
Не указывает. В принципе, соответствующие реализации могут отличаться по этому вопросу. Однако на практике они довольно последовательны.