变量赋值是一个语句还是表达式?

Dar*_*ger 2 c expression variable-assignment language-lawyer

我很熟悉语句做了什么,表达式是"构成数量的符号集合"(Python中表达式和语句之间有什么区别?).我的问题是:当你为变量赋值时,是赋值语句还是表达式?

例如(在C中):

int x = 5;
Run Code Online (Sandbox Code Playgroud)

Ste*_*mit 8

好吧,当你说

int x = 5;
Run Code Online (Sandbox Code Playgroud)

这是一个声明,恰好包括初始化.

但如果你说

x = 5
Run Code Online (Sandbox Code Playgroud)

那是一个表达.如果你在它后面加一个分号:

x = 5;
Run Code Online (Sandbox Code Playgroud)

现在这是一个声明.

表达式语句可能是C程序中最常见的语句类型.表达式语句只是任何表达式,后面都带有分号.因此,有很多东西可能看起来像其他类型的语句,它们实际上只是表达式语句.也许最好的例子是经典

printf("Hello, world!\n");
Run Code Online (Sandbox Code Playgroud)

很多人可能会认为这是一个"印刷声明".但它实际上只是另一个表达式语句:一个由单个函数调用组成的简单表达式

printf("Hello, world!\n")
Run Code Online (Sandbox Code Playgroud)

再接着是分号.

  • @DarienSpringer 对于该语言的普通用户,可能没有太大的意义。对于编译器作者和编程语言理论的学生来说,这种区别非常有趣。理解表达式出现在表达式语句以外的地方也很重要。例如,声明中的初始化器是一个表达式,“while()”和其他循环中的条件是一个表达式,子表达式出现在更大的表达式中,如[this question](https://stackoverflow.com /questions/46368964/can-we-call-a-function-inside-printf/46369346#46369346)。 (2认同)