Fri, 28 Jan 2005 12:41:42 +0300 Yuriy K wrote to Harry Zhurov:
OR>>> Про некратность разницы адресов размеру int уже сказали. Hа том же AVR OR>>> между этими двумя интами влезет какой-то char и приплыли.
HZ>> А если на том же AVR char* ip1; char* ip2;, то как?
YK> J.2.
Отписка. Меня интересует конкретный результат этого выражения на МК АВР.
OR>>> Вариант два - адреса far на архитектуре x86, состоят из сегмента и OR>>> смещения. Hу именно на 8086 ещё можно подсуетиться и посчитать, а OR>>> в защищённом режиме? Когда там сегменты - это не адреса?
HZ>> Если на одной платформе нельзя предсказать, а на другой можно, то это HZ>> как называется? Hеопределенное - это когда ни на одной платформе нельзя HZ>> предсказать? Или хотя бы на одной? А зависящее от реализации - это когда HZ>> зная конкретную платформу, можно предсказать? Или надо, чтобы это можно HZ>> было предсказать для любой конкретной платформы, а если есть хотя бы HZ>> одна, для которой нельзя, то тогда это undefined behaviour, а не HZ>> implementation-defined? Где истина?
YK> iso9899-c99.pdf
YK> 3.4.3 YK> 1 undefined behavior
YK> behavior, upon use of a nonportable or erroneous program construct or of YK> erroneous data, for which this International Standard imposes no YK> requirements
YK> 2 NOTE Possible undefined behavior ranges from ignoring the situation YK> completely with unpredictable results, to behaving during translation YK> or program execution in a documented manner characteristic of the YK> environment (with or without the issuance of a diagnostic message), YK> to terminating a translation or execution (with the issuance of YK> a diagnostic message).
YK> 3 EXAMPLE An example of undefined behavior is the behavior on integer YK> overflow.
int a, b, c; ... a = b + c;
Это порождает неопределенное поведение или нет?
HZ>> И потом, одно дело неопределенное поведение [программы], другое - HZ>> неопределенное значение результата выражения. Это, мне кажется, несколько HZ>> разные вещи.
YK> Все расписано. Тебе iso9899-c99.pdf выслать?
Есть у меня. Только я когда надо несколько другой Стандарт листаю. Этот без надобности. Тем не менее, из него не понятно, что же имеем на практике. А практика, как известно, критерий истины. В конечном итоге практический результат доминирует надо всем. И хочется понять, что же опасного в выражении int a = ptr2 - ptr1;?