问题描述
一个表达式生成一个值,语句改变机器的状态,也就是副作用。但是,我继续阅读该函数return是一条语句。如果我调用一个返回void的函数,那该如何改变机器的任何状态?或者,如果我调用一个返回非空值的函数,是否不使用它而只是调用它如何改变状态?
我只是不明白为什么返回是一条语句吗?
来源: 编程语言中的概念。剑桥:剑桥大学出版社,3.4.1陈述和表达,p。 26
解决方法
它将更改调用堆栈和程序计数器。它将返回值放在一个已知的位置(取决于调用约定)
即使您不使用返回值,编译器仍需要将其存储在某个地方,因为它可能是由未知的不同编译器单元调用的。
,声明会更改计算机的状态
除非他们没有。 C中有没有副作用的语句。
语句也是句法的构造-它与是否有副作用无关,而与它在语言语法中的适合程度有关。
,程序运行时,CPU需要跟踪其在代码中的位置。这是通过使用一个称为“ program counter”,一个“ 指令指针”,一个“ 地址寄存器或其他任意一个名称的“寄存器”来完成的。 ,类似的名称。
与其他任何寄存器或存储器位置中的值一样,该值构成“计算机状态”的一部分。此外,它可能是运行程序时最重要的“状态”。
当您的程序执行return
语句时,此“地址寄存器”中的值将更改为与调用您要从其返回的函数后立即执行的代码段相对应的值。 / p>
return
语句也(几乎总是)更改构成机器状态的其他寄存器的数量;例如,stack pointer(如果使用)将在调用函数之前重置为其值。
注意:我很过于简化了在这里调用(和返回)函数所涉及的CPU级运行时机制;但是,“示例”将有望说明return
语句必须影响“机器状态!”