为什么C中的函数return是一个语句



一个表达式生成一个值,语句改变机器的状态,也就是副作用。然而,我一直在读函数return是一个语句。如果我调用一个返回void的函数,这将如何改变机器的任何状态?或者,如果我调用一个返回非void值的函数,如果我不使用它,只是调用它,这将如何改变任何状态?

我只是不明白为什么返回是一个语句?

来源:程序设计语言中的概念。剑桥:剑桥大学出版社,3.4.1Statements and Expressions,第26页

它更改了调用堆栈和程序计数器。它将返回值放在已知的位置(取决于调用约定(

即使不使用返回值,编译器仍然需要将其存储在某个位置,因为它可能会从未知的不同编译器单元调用。

语句更改机器的状态

除非它们没有。C中有些语句没有任何副作用。

语句也是一个句法结构——这与它是否有副作用无关,而是它在语言语法中的位置。

当程序运行时,CPU需要跟踪它在代码中的位置。这是使用一个"寄存器"来完成的,该寄存器被称为程序计数器指令指针地址寄存器或许多其他类似名称中的任何一个。

这个值,就像在任何其它寄存器或存储器位置中的值一样,构成"0"的一部分;机器的状态"此外,它可能是运行程序最重要的"状态"。

当您的程序执行return语句时,此"地址寄存器"中的值将更改为与调用返回的函数后的代码段相对应的值。

return语句还(几乎总是(更改包括机器状态的许多其他寄存器;例如,堆栈指针(如果使用(将在调用函数之前重置为其值。


注意:我在这里过于简化了调用(和从(函数所涉及的CPU级别、运行时机制;然而,"示例"有望说明return语句必须影响";机器的状态">

最新更新