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

Why is the function return in C a statement?

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

我只是不明白为什么 return 是一个声明?

来源:编程语言中的概念。剑桥:剑桥大学出版社,3.4.1 陈述和表达,p。 26

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

即使您不使用 return 值,编译器仍然需要将其存储在某个地方,因为它可能会被未知的不同编译器单元调用。

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

这里的值,就像任何其他寄存器或内存位置中的值一样,构成了“机器状态”的一部分。此外,就 运行 而言,它可能是最重要的 'status' 程序。

当您的程序执行 return 语句时,此 'address register' 中的值会更改 - 更改为与调用您所在函数之后的代码段相对应的值回来了。

return 语句还(几乎总是)更改许多其他构成机器状态的寄存器;例如,stack pointer(如果使用)将在调用函数之前重置为它的值。


注:我严重过度简化了调用(和返回)中涉及的CPU-level、run-time机制来自)这里的一个功能;但是,'example' 将有望说明 return 语句 必须 影响“机器状态!”

statements alter the status of the machine

除非他们不这样做。 C 中有没有副作用的语句。

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