|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||||||
Побочные эффекты a = (b = c)29.07.2013, 20:03. Показов 1735. Ответов 18
Метки нет (Все метки)
В связи с этой темой хотелось бы уточнить:
ИМХО, в C99 - нет (6.5.16.3: "The side effect of updating the stored value of the left operand shall occur between the previous and the next sequence point"). Насчёт C11 не уверен, но вроде тоже нет (в отличие от C++11, где в 5.17.1 явно написано, что "assignment is sequenced... before the value comutation of the assignment expression").
0
|
||||||
| 29.07.2013, 20:03 | |
|
Ответы с готовыми решениями:
18
Побочные эффекты в си разгон процессора.побочные эффекты Побочные эффекты после изменения innerHTML |
|
1 / 1 / 1
Регистрация: 15.06.2013
Сообщений: 83
|
|
| 29.07.2013, 22:03 | |
|
Скобки имеют приоритет выше, чем присваивание, значит, б присваивается с и присваивается а
0
|
|
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
|
|
| 30.07.2013, 01:50 | |
|
Да оно и без скобок гарантируется - оператор = выполняется справа налево, то есть сначала будет вычеслено b = c, и только за тем a = b. Перечитайте главу "Приоритет и очерёдность вычислений" в КиР, там подробно описаны ситуации, когда очерёдность вычислений не определена. Это не тот случай.
0
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|||
| 30.07.2013, 11:25 [ТС] | |||
0
|
|||
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||
| 02.08.2013, 10:36 | |||||
|
правый операнд является присваиванием, поэтому при его вычислении вычисляются его операнды после вычисления операндов второго присваивания оно выполняется и операция возвращает новое содержимое левого операнда после этого правый операнд вычислен и выполняется первое присваивание я так понял, что побочные эффекты, получающиеся при записи в левое значение, гарантированно происходят уже после того как операнды вычислены (это уточнено в C11) так что никакого undefined behavior
1
|
|||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|||||||||||||||||
| 02.08.2013, 13:27 [ТС] | |||||||||||||||||
|
Для начала: я не говорю, что здесь операдны могут вычисляться не в том порядке. Можно и без скобок, конечно. Вопрос только в порядке записи. А истина всё-таки в стандарте, а не в K&R...
Порядок записи будет важен, если переменные volatile. И тогда получается такой интересный момент:
http://stackoverflow.com/quest... b-1-read-b http://stackoverflow.com/quest... d-volatile В C11 на этот счёт появилось примечание:
Теперь к тому, с чего всё началось в предыдущей теме, более конкретно:
C11:
0
|
|||||||||||||||||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
|
|||||||
| 02.08.2013, 14:04 | |||||||
|
Другой случай:
0
|
|||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|||||||
| 02.08.2013, 14:11 [ТС] | |||||||
0
|
|||||||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
|
||||||||||||
| 02.08.2013, 15:02 | ||||||||||||
0
|
||||||||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|||
| 02.08.2013, 16:01 [ТС] | |||
|
Дополнение к тому большому посту:
http://www.open-std.org/jtc1/s... /n1256.pdf https://github.com/maeikei/por... /n1570.pdf Примечание в начале раздела 6.5 и в том, и в другом. Допустим, C99: не так как минимум то, что это формально не соответствует фразе "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)".
0
|
|||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
|
|
| 02.08.2013, 16:07 | |
|
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||
| 02.08.2013, 16:14 | ||||||
|
volatile означает, что значение может меняться
0
|
||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|||||||||||||||||
| 02.08.2013, 17:03 [ТС] | |||||||||||||||||
0
|
|||||||||||||||||
|
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
|
||||||||||||||||
| 02.08.2013, 18:44 | ||||||||||||||||
|
не углубляясь в раскаленную атмосферу страстей...
никогда не понимал этих срачей и холиваров а-ля i = i++ + ++i; зачем все усложнять и делать код чертвоски запутанным, неоднозначным и непонятным? KISS же. не уверен в инструкции которую написал? - прочти документацию! не помогло? - сделай проще! не можеш проще? - ты _________________ а не программист(вписаить прилагательное в зависимости от ваших морально-этических взглядов и принципов).
сделай, то в чем ты уверен.
языки же предоставляют несколько путей для решения задач(имею ввиду на уровне инструкций), то есть одну и ту же задачу можно решить несколькими способами(как было продемонстрировано выше). зачем усложнять?
1
|
||||||||||||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|||||||||||||||||
| 02.08.2013, 18:58 [ТС] | |||||||||||||||||
0
|
|||||||||||||||||
|
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
|
|
| 02.08.2013, 19:24 | |
|
все зависит от результата который вы хотите получить.
1
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||
| 02.08.2013, 19:32 [ТС] | ||
|
0
|
||
|
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
|
|||||||
| 02.08.2013, 19:40 | |||||||
|
я имел ввиду, что если вам нужно занулить занения переменных. но вы не уверенны x = y = z = 0; то ведь это можно сделать простым и более очевидным способом
то есть тут вы получите то, что ожидаете. на этом моя компетенция закачивается и как быть в инном случае я уже, к сожалению, сказать немогу. могу лишь делать некоторые предположения, которые, не факт, что будут верными.
0
|
|||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
| 02.08.2013, 19:52 [ТС] | |
|
Я про то, что понятно, что если нужно написать код, который что-то делает, то можно написать так, что ни у кого не будет вопросов, как он работает. Проблемы начинаются, когда, код уже есть, а что он должен делать - неясно. Например, при написании компилятора.
0
|
|
| 02.08.2013, 19:52 | |
|
Помогаю со студенческими работами здесь
19
Проблемы при вызове метода: это выражение вызывает побочные эффекты Что означает сообщение компилятора: элемент вызывает побочные эффекты и не будет вычислен
двумерный массив- побочные диагонали Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|