Описание тега side-effects

Побочный эффект - это программный термин, который относится к предполагаемым изменениям в поведении программы, например к изменению значения переменной. Это важный термин при обсуждении оптимизации компилятора и оценки выражений.

Побочный эффект - это программный термин, который относится к предполагаемым изменениям в поведении программы, например к изменению значения переменной. Это важный термин при обсуждении оптимизации компилятора и оценки выражений.

В частности, этот термин часто используется в языках C и C++. Одно формальное определение термина можно найти в ISO 9899:2011 (C11) 5.1.2.3 §2:

Доступ к изменчивому объекту, изменение объекта, изменение файла или вызов функции, которая выполняет любую из этих операций, - все это побочные эффекты, которые представляют собой изменения в состоянии среды выполнения. Оценка выражения в целом включает как вычисление значений, так и запуск побочных эффектов.

C++ содержит идентичное определение, см., Например, C++11 1.9/12.

Когда компилятор оптимизирует код, он должен убедиться, что он не удаляет побочных эффектов (C11 5.1.2.3 §4):

В абстрактной машине все выражения оцениваются в соответствии с семантикой. Фактическая реализация не должна оценивать часть выражения, если она может сделать вывод, что ее значение не используется и что никаких побочных эффектов не возникает (в том числе вызванных вызовом функции или доступом к изменчивому объекту).

Следовательно volatile квалификатор часто используется, чтобы предотвратить оптимизацию компилятором определенных частей кода, поскольку любой доступ (чтение / запись) к изменчивому объекту считается побочным эффектом.

Побочные эффекты также являются важным термином при обсуждении оценки экспрессии. Например, выражения, содержащие несколько побочных эффектов для одной и той же переменной, без так называемой "точки последовательности" между ними, вызывают неопределенное поведение, см. Неопределенное поведение и точки последовательности.