Arlleex 178 18 июля, 2023 Опубликовано 18 июля, 2023 · Жалоба 2 минуты назад, sasamy сказал: в С11 изменили 6.5 Expressions ... в С99 нет ничего про UB в 6.5 Expressions Изменили, потому что так стало понятнее. А суть от этого не поменялась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 2 18 июля, 2023 Опубликовано 18 июля, 2023 · Жалоба On 7/18/2023 at 11:20 PM, Arlleex said: Изменили, потому что так стало понятнее. А суть от этого не поменялась. было unspecified behavior стало undefined behavior, почему компиляторы не выдают варнинги после изменения стандарта непонятно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 18 июля, 2023 Опубликовано 18 июля, 2023 · Жалоба 18 минут назад, sasamy сказал: было unspecified behavior стало undefined behavior, почему компиляторы не выдают варнинги после изменения стандарта непонятно Почему оно было unspecified? Я же привел выдежки из C99 и C11 - там один и тот же пункт по-разному описан: 6.5 Expressions было (C99) Цитата 2 Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression.72) Furthermore, the prior value shall be read only to determine the value to be stored.73) стало (C11) Цитата 2 If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined. If there are multiple allowable orderings of the subexpressions of an expression, the behavior is undefined if such an unsequenced side effect occurs in any of the orderings.84) J.2 Undefined behavior было (C99) Цитата — Between two sequence points, an object is modified more than once, or is modified and the prior value is read other than to determine the value to be stored (6.5). стало (C11) Цитата — A side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object (6.5). причем точь-в-точь вместо одних и тех же пунктов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 2 19 июля, 2023 Опубликовано 19 июля, 2023 · Жалоба On 7/18/2023 at 11:59 PM, Arlleex said: Почему оно было unspecified? почему вы у меня спрашиваете ? факт что компиляторы не реагируют на volatile, и не только компиляторы https://godbolt.org/z/sc6Yn4Mr7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 19 июля, 2023 Опубликовано 19 июля, 2023 · Жалоба 1 минуту назад, sasamy сказал: почему вы у меня спрашиваете ? факт что компиляторы не реагируют на volatile, и не только компиляторы И что? Это показатель того, что код будет корректный и без неопределенного поведения? Выше пример union { int i0; int volatile i1; }; тоже анализатор проглотит без проблем, надо полагать? А в нем неопределенное поведение. Разговор шел только о том, что отсутствие warnings - это совершенно не показатель отсутствия багов в коде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 2 19 июля, 2023 Опубликовано 19 июля, 2023 · Жалоба On 7/19/2023 at 9:33 AM, Arlleex said: А в нем неопределенное поведение. Разговор шел только о том, что отсутствие warnings - это совершенно не показатель отсутствия багов в коде. ещё раз - наличие варнинга и UB это не ошибка в С, что бы ни говорил IAR, MISRA или ООН. https://godbolt.org/z/zWqaPn3se Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 19 июля, 2023 Опубликовано 19 июля, 2023 · Жалоба 2 минуты назад, sasamy сказал: ещё раз - наличие варнинга и UB это не ошибка в С, что бы ни говорил IAR, MISRA или ООН. Я поражаюсь вашим способностям отрицать очевидное, но вы и дальше продолжайте верить, что код, содержащий UB - это код, не содержащий ошибок. Парировать бесконечные провокации я устал, за сим прекращаю. Почитайте на досуге определение UB в стандарте Си. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 2 19 июля, 2023 Опубликовано 19 июля, 2023 (изменено) · Жалоба On 7/19/2023 at 9:48 AM, Arlleex said: но вы и дальше продолжайте верить, что код, содержащий UB - это код, не содержащий ошибок. ещё раз - не считаю нужным оправдываться за ваши фантазии, для тех кому не нужны UB в языке спроектировали Rust., а вы дальше можете верить что пишете на C без ошибок - варнингов нет! Изменено 19 июля, 2023 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
std 8 13 сентября, 2023 Опубликовано 13 сентября, 2023 · Жалоба On 7/15/2023 at 6:04 PM, kan35 said: Всем большое спасибо за ответы! Мне в общем как бы всё понятно, в общем то и с самого начала было ясно, просто не понимаю почему GCC ARM делает unsigned short y = x; // y=0x0088 а старый компилятор ANSI'89 unsigned short y = x; // y=0xFF88 Здравствуйте, kan35. Выше все чудесно написали, но мне показалось что до конца именно вашу странность не объяснили. Я думаю что ваша странность объясняется так. Скорее всего, вы конвертировали в short не из явного signed char, а из char. Во многих компиляторах существует опция знака char по умолчанию, знаковый или беззнаковый. Либо у вас была другая целевая машина, потому что знак char может еще зависеть от целевой платформы. В итоге у вас был в одном случае по умолчанию unsigned char, а в другом случае signed char. Вот и получались разные результаты. В вопросе знака char до определенной даты имелись расхождения. Так, старый K&R (по книжке) char беззнаковый, первые стандарты в этом вопросе ничего не утверждали, стандарт 99 сообщает же только: Quote The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char. Для GCC знак задается -funsigned-char или -fsigned-char для MSVC (cl.exe) опция /J делает char unsigned. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться