-6

为什么这些程序有效,为什么我没有收到“缺少分号”错误?带着这个问题,我想问一下我什么时候可以跳过分号。据我所知,分号是句子终止符。在我们使用逗号而不是分号的情况下编写这些类型的语句是否正确?在 program1 中有一个否定,然后在一行中打印,然后 getchar() 没有分号并使用逗号。类似地,在程序 2 中,否定、赋值、printf 和 getchar() 都使用了。我们可以用逗号而不是分号写多少行?

程序1:

#include <stdio.h>
int main()
{
   int i = 0xAA;
   ~i, printf("%X\n", i),getchar();
   return 0;
}

方案二:

#include <stdio.h>
int main()
{
   int i = 0xAA;
   i=~i, printf("%X\n", i),getchar();
   return 0;
}
4

2 回答 2

8

为什么分号丢失错误没有出现在c中

因为它没有丢失。

于 2013-06-15T19:58:04.327 回答
2

这是因为逗号是 C 中的运算符。根据 C 编程语言的第二版:

一对用逗号分隔的表达式从左到右求值,结果的类型和值是右操作数的类型和值。

但请注意,它还说:

分隔函数参数、声明中的变量等的逗号不是逗号运算符,也不保证从左到右的评估。

这里解释了一个忘记这一点的常见示例。

所以这两个程序都是正确的(尽管只有在第二个程序中i打印了反转的值)。

于 2013-06-15T20:00:07.460 回答