Побочные эффекты в С

Я думал, что мое понимание побочных эффектов в языках программирования было в порядке.

Я думаю, что это отличное определение от википедия:

«в дополнение к возвращению значения, он также изменяет некоторое состояние или имеет
наблюдаемое взаимодействие с вызывающими функциями или внешним миром «.

Тем не менее, я прочитал это по той же ссылке (да, я знаю, что это, вероятно, не лучшее место, чтобы искать примеры):

«Одна общая демонстрация побочного действия — это
оператор присваивания в C ++. Например, присваивание возвращает право
операнд и имеет побочный эффект от присвоения этого значения переменной.
Это позволяет синтаксически чистить несколько назначений:

int i, j;
i = j = 3;

Почему они считают это побочным эффектом? Это так же, как два простых оператора присваивания 2 локальным переменным.

Заранее спасибо.

1

Решение

Вы можете использовать выражение присваивания в качестве значения:

double d = 3.5;

int x, y;

printf("%d", x = d); // Prints "3".

y = (x = d) * 5; // Sets y to 15.

double z = x = d; // Sets z to 3 (not 3.5).

Значение, возвращаемое из x = d, это его основной эффект. Изменение стоимости x это побочный эффект.

9

Другие решения

Если в расчете изменяется состояние мира, например, значение переменной, это побочный эффект.

Например, j = 3 рассчитывает 3, но это также изменяет значение j как побочный эффект.

Менее тривиальный пример: j += 3 исчисляет j + 3, но это также устанавливает j к этому новому значению.

Семантика С запутывает воды: в С основной смысл написания i = 1 получить побочный эффект от назначения переменной; не рассчитывает стоимость 1, Разговоры о назначениях как побочных эффектах имеют больше смысла с функциональными языками программирования, такими как Haskell или Erlang, где переменные могут быть назначены только один раз.

4

Я полагаю, что это потому, что j = 3 имеет предполагаемый эффект присвоения значения 3 в j но также имеет побочный эффект возврате значение j

1
По вопросам рекламы [email protected]