c - 为什么if else或嵌套if else在C中被称为单语句

标签 c

初级 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/

相关文章:

c - 用人物画一个设计

c - 为什么可以将另一种类型的参数传递给函数?

c - 使用 scanf 的格式错误的输出(黑客攻击 : The Art of Exploitation Example)

sql - 在 C 中连接字符串以组成 SQL 查询

c - 空间究竟如何与 scanf 一起工作?

c - 没有打印任何内容

c - c库函数如何存放在内存中?

c - 为什么 gdb 找不到 ../sysdeps/unix/sysv/linux/ifaddrs.c

python - Linux:如何模拟接口(interface)上的传入数据包?

c - 如何指向数组