我正在编辑几天前编写的程序的源代码,并观察到一件有趣的事情。
我有以下两条陈述:
newNode->data = 5
和
newNode->next = NUll
并且上面两个语句之间用逗号(,)代替分号(;)。我感到很惊讶,因为我一直认为这会导致错误。
下面,我写了一个简短的C程序来表达我的意思。
#include<stdio.h>
#include<stdlib.h>
/*node structure definition*/
struct node
{
int data;
struct node *next;
};
/*----------main()------------*/
int main(int argc, char *argv[])
{
struct node *newNode = NULL;
newNode = malloc(sizeof(struct node));
/*Below is the interesting statement*/
/*LABEL: QUESTION HERE*/
newNode->data = 5,
newNode->next = NULL;
printf("data: %d\n",newNode->data);
while(newNode->next != NULL)
{
printf("Not Null\n");
}
return 0;
}
请参阅下面的上述程序的编译和运行示例。
Lunix $ gcc -Wall testComma.c -o testComma
Lunix $ ./testComma
data: 5
Lunix $
如您所见,该程序可以编译并正常运行。
使用逗号(,)代替分号(;)应该不会在这里导致错误?为什么呢
我以为我知道C语句是什么,但看起来好像我不知道!有人可以解释这种情况下没有错误的原因吗?
您不能用逗号分隔两个C语句。但是,您可以用逗号分隔两个C expressions,因为,是一个运算符(按顺序计算其两个操作数,首先是左,然后是右,最后返回右手一个)。 。
此外,a = b
是表达式。但是,可能的C语句类型之一是表达式,因此您可以将任何表达式用作语句,包括a + b;
,a = b;
和a = b, a + b;