Ошибка в вычислениях адресов у GCC ? - Page 16

Do you have a question? Post it now! No Registration Necessary

Threaded View
Re: Ошибка в вычислениях адресов у GCC ?
Привет Harry!

28 Jan 05 07:53, Harry Zhurov писал Yuriy K:

 HZ>     И где тут английским по белому написано, что _не_ _определено_?
 HZ> Где слово undefined? Тут вообще не рассматривается обсуждаемый случай.

                ISO/ IEC JTC1/SC22/WG14 N843
[...]
       4.  Conformance
[...]
                   Undefined behavior  is  otherwise  indicated  in
       this   International   Standard  by  the  words  ``undefined
       behavior'' or by the omission of any explicit definition  of
       behavior.   There  is  no difference in emphasis among these
       three; they all describe ``behavior that is undefined''.

 HZ> А про него, по ходу, правильнее сказать "зависит от реализации"?

       3.11
       [#1] implementation-defined behavior
       unspecified behavior where each implementation documents how
       the choice is made
[...]
       [#1] unspecified behavior
       behavior where this International Standard provides  two  or
       more  possibilities  and imposes no requirements on which is
       chosen in any instance

    AFAIK по обсуждаемому случаю в стандарте нет "two or more possibilities".
Стало быть, именно undefined.

 HZ>     Про undefined там сказано только то, что если результат операции
 HZ> (вычитания адреса одного элемента массива из адреса другого элемента -
 HZ> т.е. тоже не наш случай) не представим типом ptrdiff_t, то поведение
 HZ> не определено. Хотя мне не понятно, почему - если я от одного целого
 HZ> (адрес - целое) отнял другое целое, то получил тоже какое-то целое.

    Указатель - не адрес.

 HZ> Про то, определено это _значение_ или не определено, обсуждаем, но
 HZ> почему тут _поведение-то_ неопределено? Hеопределенное поведение - это
 HZ> когда может произойти все, что угодно вплоть до падения программы. Hе
 HZ> понятно, как такое безобидное действие, как вычитание одного адреса из
 HZ> другого, может привести к каким-то негативным последствиям??! Речь
 HZ> ведь не идет об использовании результата!

    Hу вот такие правила приняли, что согласно им имеет право:

       [#2]  NOTE  Possible undefined behavior ranges from ignoring |
       the situation  completely  with  unpredictable  results,  to
       behaving  during  translation  or  program  execution  in  a
       documented manner characteristic of the environment (with or
       without   the   issuance   of   a  diagnostic  message),  to
       terminating a translation or execution (with the issuance of
       a diagnostic message).

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Посетители должны общаться по сети.

Site Timeline