我从Stephen的"C Primer Plus“一书中学习C语言,重点是:
“完整表达式是指不是完整表达式的较大expression.Examples的子表达式的表达式,包括表达式语句中的表达式和用作while循环测试条件的表达式”
我不明白什么是完整表达式的确切定义,以及为什么这本书认为测试条件是完全表达式。
有谁能解释清楚什么是“完全表达”,我如何具体说明一个表达式是完整的表达还是不完整的表达?
发布于 2018-02-20 07:51:36
他直接引用了C标准,例如C11 6.8:
完整表达式是一个表达式,它不是另一个表达式或声明器的一部分。以下每一个都是一个完整的表达式:不属于复合文字的初始化器;表达式语句中的表达式;选择语句的控制表达式(
if
或switch
);while
或do
语句的控制表达式;for
语句的每个(可选)表达式;返回语句中的(可选)表达式。在计算一个完整表达式和计算下一个要计算的完整表达式之间有一个顺序点。
一些例子是:
if(x)
for(x; y; z)
return x;
其中,x,y和z是完全表达式。
完整表达式是一个语言语法术语,并不是C程序员需要知道的。它只与“语言律师”和那些制作编译器或静态分析器的人有关。C标准涉及语句、块和完整的表达式。
程序员可能需要知道的是上面引用的文本的最后一句话,这意味着在一个完整的表达式之后,该表达式的所有副作用都会被执行。因此,如果我编写像if(i++) printf("%d", i);
这样的代码,那么我就知道i++
是在printf行之前执行的。
然而,在读取编译器错误时,了解这些枯燥的语法术语可能是非常有用的。例如臭名昭著的“语句缺失”,在通俗易懂的英语中,最有可能的意思是你忘记了分号。
发布于 2018-02-20 10:38:11
请考虑下面的声明
a = b + c;
a = b + c
是一个表达式,它不是任何较大表达式的子表达式。这被称为完全表达式。
b + c
是较大表达式a = b + c
的子表达式,因此它不是一个完整的表达式。b
也是完整表达式a = b + c
和子表达式b + c
的子表达式。
https://stackoverflow.com/questions/48880037
复制相似问题