我们说表达式“evaluate(求值)”值,语句命令计算机“执行”。但在我看来,这似乎是相同的术语。在C语言中,执行和评估有什么区别?
我们说表达式“evaluate(求值)”值,语句命令计算机“执行”。但在我看来,这似乎是相同的术语。在C语言中,执行和评估有什么区别?
这几乎在所有情况下都足够接近而不会有所影响。
如果我们要非常精确的话,我会说评估会生成一个结果值,并且不会改变状态,而执行会改变状态,结果值要么没有产生,要么是附带的并被忽略了。
一般来说,我们评估表达式,执行语句。
例如,在 C 中,如果有一个 if 语句,我们首先评估条件,然后执行(或不执行)主体。
混淆的原因是因为在 C 中我们有可以改变状态的表达式(赋值运算符、增量/减量运算符),以及仅仅是表达式的语句。
所以当你看到
a = b+c;
a=b+c
进行求值,其中结果(非常量引用a
)会被丢弃,而副作用(a
的值发生改变)则非常重要。if()
或 while()
括号中找到的内容,或者等号右边的内容。int x = 2 + 3;
是一个声明变量 x
并将表达式 2 + 3
的结果(即 5
)赋值给它的语句。x = y + z;
这个表达式中有多少个表达式?第二段是误导性的。 - haccksint x = 2 + 3
是一个表达式。 - Baussy
和z
都是表达式,但如果它们是函数,比如x = y() + z();
,那么称它们为表达式可能更有意义。如果它们是数字,在我看来称它们为表达式似乎有些过头了。在这个特定的上下文中,我不会说整行代码是一个表达式,因为这只会让人感到困惑。我试图展示表达式和指令之间的区别。说某件事既是表达式又是指令并没有帮助。 - Fabio says Reinstate Monicaint i = 5, j;
j = 10 + 5*i;
j = 10 + 5*i;
时,会对表达式j
、10
、5*i
、10 + 5*i
和j = 10 + 5*i
进行求值。注意前三个表达式可以按任意顺序进行求值。