Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4097

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Часть I. Язык программирования С 

56 

 

В  языке  программирования  С++  результатом  оператора 

,

 

может 

быть и L-value, если оно является результатом вычисления второ-
го операнда. 

Учитывая это замечание, в языке программирования С++ можно 
написать следующее выражение: 

  int x = 1, y = 2, z; 
  x++, z = x - y;    /* z = 0 */ 

На практике оператор 

,

  обычно  используется  там,  где  требуется 

вычислить несколько выражений, хотя по синтаксису допускает-
ся  запись  только  одного  выражения.  Например,  цикл 

for

  может 

быть инициализирован следующим образом: 

  for (i = 1, j = n; i < j; ++i, --j) 
    a[i] = b[j]; 

3.14. Побочные эффекты 

Если  при  вычислении  выражения  значение  переменной,  входя-
щей в это выражение, изменяется, то говорят, что произошел 

по-

бочный эффект

. Например, вычисление выражения: 

  ++x - y 

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

x

. Но в этом случае результат вычисления вы-

ражения предсказуем, т. к. оператор инкремента имеет более вы-
сокий  приоритет,  чем  оператор  вычитания.  Но  если  операторы 
имеют одинаковый приоритет, то результат вычисления выраже-
ния  может  быть  непредсказуемым,  т. к.  последовательность  вы-
числения  таких  операторов  не  определена.  Например,  в  языке 
программирования С можно написать следующее выражение: 

  y = x++ + x--; 

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

  x[i] = i++; 


background image

Глава 3. Операторы и выражения 

57 

И при вызове функций, например: 

  f(i + 1, ++i); 

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

3.15. Точки последовательности 

В языке программирования С при вычислении значения выраже-
ния  определяются  такие  точки,  до  перехода  через  которые  все 
предыдущие  вычисления  должны  быть  завершены.  Такие  точки 
называются 

точками последовательности

 (sequence points). Точ-

ки  последовательности  фиксируют  побочные  эффекты  при  вы-
числении  значения  выражения.  Между  точками  последователь-
ности значение любого объекта должно модифицироваться толь-
ко  один  раз,  в  противном  случае  значение  выражения  не 
определено.  В  языке  программирования  С  определены  следую-
щие  точки  последовательности  при  вычислении  значения  выра-
жения: 

 

левый  операнд  логического  оператора 

&&

,  т. е.  вычисляется 

значение  левого  операнда  логического  оператора 

&&

,  и  если 

оно равно 0, то дальнейших вычислений не происходит; 

 

левый  операнд  логического  оператора 

||

,  т. е.  вычисляется 

значение  левого  операнда  логического  оператора 

||

,  и  если 

оно равно 1, то дальнейших вычислений не происходит; 

 

левый  операнд  оператора 

,

(запятая),  т. е.  перед  вычислением 

правого операнда оператора 

,

 вычисление его левого операнда 

полностью заканчивается; 

 

первый  операнд  условного  оператора,  т. е.  вычисление  этого 
операнда  полностью  завершается  перед  вычислением  значе-
ний других операндов. 


background image

Часть I. Язык программирования С 

58 

Например, при вычислении значения следующего выражения вы-
зов  функции 

f

  не  происходит,  т. к.  левый  операнд  логического 

оператора 

&&

 дает в результате 

0

  int x = 0, y; 
  y = x && f(x);      /* y = 0 */ 

Однако в следующем случае функция 

f

 вызывается: 

  int x = 1, y; 
  y = x && f(x); 

 


background image

  

 
 

Г Л А В А  

 
 
 

Управляющие инструкции 

 

4.1. Инструкции выбора 

if

 и 

if...else

 

Инструкция 

if

 имеет следующий синтаксис: 

  if (выражение) 
    инструкция 

Работает 

if

  следующим  образом.  Сначала  вычисляется  логиче-

ское значение 

выражения

. При этом отметим, что при вычислении 

выражения

  завершаются  все  побочные  эффекты.  Если  это  логиче-

ское значение истинно, то выполняется 

инструкция

. В противном 

случае 

инструкция

 пропускается. Например, в следующем приме-

ре значение 

x

 увеличивается на единицу только в том случае, ес-

ли выполняется условие 

x > 0

  if (x > 0) 
    ++x; 

Если  в  зависимости  от  логического  значения 

выражения

  необхо-

дим выбор одной из двух инструкций, то используется  инструк-
ция 

if...else

, которая имеет следующий синтаксис: 

  if (условие) 
    инструкция_1 
  else 
    инструкция_2 

  

 


background image

Часть I. Язык программирования С 

60 

В  этом  случае,  если  логическое  значение 

выражения

  истинно,  то 

выполняется 

инструкция_1

,  в  противном  случае  выполняется  

инструкция_2

. Например: 

  if (a > 0) 
    ++a; 
  else 
    --a; 

Отметим,  что  инструкции 

if

  и 

if...else

  могут  быть  вложенны-

ми. Например: 

  if (a > 0) 
    if (b > 0) 
      c = a + b; 
    else 
      c = a – b; 

В этом примере ключевое слово 

else

  относится  ко  второй  инст-

рукции 

if

.  Чтобы  связать  это  слово  с  первой  инструкцией 

if

нужно заключить вторую инструкцию 

if

 в блок, т. е. написать: 

  if (a > 0) 
  { 
     if (b > 0) 
       c = a + b; 
  } 
  else 
    c = a – b; 

4.2. Инструкция выбора 

switch

 

Инструкция выбора 

switch

 имеет следующий вид: 

  switch (выражение) 
  { 
  case  константа_1: 
    инструкции 
  case  константа_2: 
    инструкции 
  ... 


Смотрите также файлы