初级 C 程序员的问题:
if (exp)
doX;
else
doY;
分号是语句分隔符,那么我很困惑 if .. else 或嵌套 if .. else 怎么称为单个语句?
最佳答案
在 C 中,有些语句包含其他语句——这样的语句不以分号结束。 if
语句是一个选择语句,它可以包含一个或两个语句(它们可能又是复合语句 -- 包含任意数量语句的花括号 block ),而它本身是一个语句。 if
语句被视为单个语句,因为它可以放在任何可以出现语句的地方。
考虑表达式:1
是一个表达式,1+1
也是,(1+(1+1)*(1-1 ))/1*(1%1)
...这是一个表达式,包含其他表达式。
或者想想政治 split 。例如,美国是一个政治分区,但它包含州,这是政治分区,州包含县,县又包含城市……所有政治分区。
编辑:关于您在评论中提出的问题……没有“else 语句”。相反,if
语句有一个可选的 else 部分:
if (condition) statement1 [else statement2]
示例中的分号终止了内部语句;不需要分号来结束整个 if
语句。例如,
if (exp)
{ do1(); do2(); do3(); } // statement1
else
{ do4(); do5(); } // statement2
// no semicolon ending if statement
这里,statement1 和 statement2 是 block ,它们没有以分号结束,就像整个 if
语句没有以分号结束一样。
针对以下问题进行编辑: 单个语句的精确定义在 C 标准中给出并且非常复杂,因为它几乎包含整个 C 语法......我试图给出一个更概念性的概述。语句是程序的可执行组件,它没有值(与表达式相反,表达式有值)。一般来说,语句要么是以分号结尾的非复合语句,例如
x = 5;
或
return;
... 或者它们是不以分号结尾的复合语句,尽管如果它们的最后一个组件以分号结尾,它们可能会出现,例如,
while (1)
do_something();
或
while (1) {
do_something();
}
显然,这些分号都没有结束 while 语句,它们结束了内部语句。
关于c - 为什么if else或嵌套if else在C中被称为单语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182741/