c中的分号和逗号

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

程序1:

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

计划2:

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

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

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

但请注意,它也说:

将函数参数,声明中的变量等分开的逗号不是逗号运算符,也不保证从左到右的求值。

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

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

为什么分号丢失错误不会出现在c中

因为它不缺少。