表达式生成一个值,语句改变机器的状态,也就是产生了副作用。然而,我一直在阅读函数返回值是一个语句。如果我调用一个返回空值的函数,那么这会如何改变机器的状态呢?或者说,如果我调用一个返回非空值但不使用它的函数,那么这将如何改变任何状态?
我就是不明白为什么“return”是一个语句?
来源:《编程语言概念》第3.4.1节 语句和表达式, 第26页,剑桥大学出版社
我就是不明白为什么“return”是一个语句?
来源:《编程语言概念》第3.4.1节 语句和表达式, 第26页,剑桥大学出版社
它改变了调用栈和程序计数器。它将返回值放在一个已知的位置(取决于调用约定)。
即使您不使用返回值,编译器仍然需要将其存储在某个地方,因为它可能被未知的不同编译器单元调用。
语句可以改变机器的状态
但并非所有语句都会改变状态,在C语言中有一些语句没有副作用。
语句也是一种语法结构 - 它与是否具有副作用无关,而是与它在语言语法中的位置有关。
return
语句时,这个“地址寄存器”中的值会改变,变成对应于从中返回的函数调用后紧随其后的代码片段的值。
return
语句几乎总是会更改许多其他寄存器的状态,例如堆栈指针(如果使用)将被重置为调用函数之前的值。
return
语句必须影响“机器的状态!”
if(0) abort();
,它确实是一个C语句。简短的回答是,return
是一个语句,因为编程语言定义它如此。请引用那些泛泛而谈的陈述(例如“语句会改变机器状态”)的来源。例如,考虑if(0) abort();
这个语句确实是一个C语句。简单来说,return
是一个语句,因为编程语言将其定义为语句。 - dxivreturn
语句肯定会改变这种状态。 - Nate Eldredgereturn
是一个语句还是关键字?毫无疑问,return;
(请注意第七个字符)是一个语句。 - Adrian Mole