Мы говорим, что выражения «оценивают» значения и заказывают компьютер компьютера «исполнять». Но для меня это похоже на ту же терминологию. В чем разница между выполнением и оценкой в C?В чем разница между выполнением и оценкой?
ответ
Когда выполняется инструкция, она приходит к действию оценки его выражений. Первое исполнение происходит, а затем выполняется оценка.
В сниппета
int i = 5, j;
j = 10 + 5*i;
когда оператор j = 10 + 5*i;
выполняется, то оценка выражений j
, 10
, 5*i
, 10 + 5*i
и j = 10 + 5*i
происходит. Обратите внимание, что первые три могут быть оценены в любом порядке.
«Первое исполнение происходит, а затем оценивается». Вы имеете в виду время начала этих процессов? Или конец? Они перекрываются во времени? Или они взаимоисключающие? – CinCout
@CinCout; Добавлен пример для ясности. – haccks
@hacce Спасибо за ответ! Когда выполняется выполнение, что происходит внутри компилятора? – Jin
Это действительно достаточно близко, чтобы не иметь значения практически во всех случаях.
Если мы хотим быть очень точными, я бы сказал, что оценка производит значение результата и не изменяет состояние, тогда как исполнение меняет состояние, а значение результата либо не создается, либо является случайным и игнорируется.
Вообще говоря, мы оцениваем выражения, мы выполняем утверждения.
Так, например, если у нас есть оператор if
на C, мы сначала оцениваем условие, затем выполняем (или нет) тело.
Путаница усиливается, потому что в C мы имеем выражения, которые изменяют статус (оператор присваивания, операторы приращения/уменьшения) и утверждения, которые представляют собой ничего, кроме выражений.
Так что, когда вы видите
a = b+c;
в C, это утверждение, которое выполняется, но исполнение состоит из вычисления выражения a=b+c
, где отбрасывается результат и побочный эффект (a
изменяет свое значение) это важно.
Когда начинается оценка? До или после или в то же время исполнения? – haccks
Это всего лишь вопрос лингвистики. Выражения вычисляются, выполняются утверждения. В обоих случаях мы можем сказать, что «что-то делается», и я не стал бы слишком беспокоиться об этой разнице.
Чтобы уточнить: грубо говоря, инструкция представляет собой строку кода, а выражение - это то, что вы можете найти между скобками в if()
или while()
или с правой стороны знака равенства.
Например, int x = 2 + 3;
является утверждение, что объявляется переменная x
и присваивает ей результат выражения 2 + 3
, то есть 5
.
Сколько выражений находится в 'x = y + z;'? Второй пара вводит в заблуждение. – haccks
Но 'int x = 2 + 3' является выражением. – Bauss
@haccks: Я думаю, что в третьем абзаце я объяснил, что я имел в виду. Я не пытаюсь быть на 100% точным, а скорее объяснять вещи любым простым способом. В вашем примере технически как 'y', так и' z' являются выражениями, но я бы сказал, что было бы разумнее назвать их, если бы они были функциями, такими как 'x = y() + z();'. Если они являются цифрами, называть их выражениями кажутся излишними для меня. И в этом конкретном контексте я бы не сказал, что полная строка - это выражение, потому что это просто смущает. Я пытаюсь показать разницу между выражениями и инструкциями. Говорить, что что-то и то, и другое не помогает. –
Как я думал об этом: термин «выражение» переносится из математической терминологии. Оценка является defined as:
оценить
Чтобы оценить, чтобы найти значение числового или алгебраического выражения.
Выражение имеет following definition: (Жирный добавлено для выразительности)
Выражения в языке программирования является сочетанием одного или более явных значений, константы, переменные, операторы и функций, которые язык программирования интерпретируется (в соответствии с его конкретными правилами приоритета и ассоциации) и вычисляет для создания («возвращать», в среде с состоянием) другое значение.
В программировании практически каждое утверждение (или каждое написанное значение) составлено из многих выражений. Я всегда использовал оценку , чтобы обратиться к вычислению этих выражений и выполнить , чтобы обратиться к вычислению всего утверждения. Это часто совпадает с различиями в отношении возвращаемого значения и побочных эффектов. У полных заявлений обычно есть побочные эффекты, и выражения обычно возвращают какое-то значение.
Спасибо за ответ rhmh! Кстати, выполняется ли выполнение перед оценкой выражений? – Jin
@jwqwerty Я не хорошо разбираюсь в семантике компилятора, но если выражение является частью оператора, оно должно быть оценено для выполнения функции. Однако можно утверждать, что выполнение началось с оценки компонентов. Вместо того, чтобы до или после, я бы сказал, что оценка происходит * во время * исполнения. – rtmh
Это более или менее то же самое, не беспокойтесь об этих тонкостях английского языка. –