SLN*_*SLN 16 c statements
一个表达式产生一个值,语句改变机器的状态,也就是副作用。但是,我一直在读那个函数 return 是一个声明。如果我调用一个返回空值的函数,这将如何改变机器的任何状态?或者,如果我调用一个返回非空值的函数,如果我不使用它而只是调用它,这将如何改变任何状态?
我只是不明白为什么返回是一个声明?
资料来源:编程语言中的概念。剑桥:剑桥大学出版社,3.4.1 Statements and Expressions,p。26
Lou*_*nco 12
它改变了调用堆栈和程序计数器。它将返回值放在一个已知的地方(取决于调用约定)
即使您不使用返回值,编译器仍需要将其存储在某处,因为它可能会从未知的不同编译器单元中调用。
当程序运行时,CPU 需要跟踪它在代码中的位置。这是使用“寄存器”完成的,该寄存器被称为程序计数器、指令指针、地址寄存器或许多其他类似名称中的任何一个。
这里的值,就像任何其他寄存器或内存位置中的值一样,构成了“机器状态”的一部分。此外,它可能是关于运行程序的最重要的“状态”。
当您的程序执行一条return语句时,此“地址寄存器”中的值将更改为与调用您正在返回的函数之后紧接的代码段相对应的值。
该return语句还(几乎总是)更改了许多其他构成机器状态的寄存器;例如,堆栈指针(如果使用)将在调用函数之前重置为其值。
注:我有严重过于简化了调用(和返回)这里的函数CPU级的,运行时间力学; 然而,“示例”有望说明该return语句必须影响“机器的状态!”这一点。