如何用逗号(,)分隔两个C语句?

如何用逗号(,)分隔两个C语句?,c,syntax,C,Syntax,我正在编辑几天前编写的一个程序的源代码,发现了一件有趣的事情 我有以下两种说法: newNode->data = 5 及 还有一个逗号,而不是分号;将上述两种说法分开。我很惊讶,因为我一直认为这会导致一个错误 下面,我写了一个简短的C程序来说明我想问什么 #include<stdio.h> #include<stdlib.h> /*node structure definition*/ struct node { int data; struct

我正在编辑几天前编写的一个程序的源代码,发现了一件有趣的事情

我有以下两种说法:

newNode->data = 5

还有一个逗号,而不是分号;将上述两种说法分开。我很惊讶,因为我一直认为这会导致一个错误

下面,我写了一个简短的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;
} 
如您所见,程序编译和运行时没有任何问题

使用逗号,而不是分号;在这里不应该导致错误吗?为什么?


我以为我知道什么是C语句,但看起来我不知道!有人能解释一下这种情况下没有错误的原因吗?

不能用逗号分隔两个C语句。但是,您可以用逗号分隔两个C表达式,因为,是一个按顺序计算其两个操作数的运算符,先是左操作数,然后是右操作数,最后返回右操作数


此外,a=b是一个表达式。但是,可能的C语句类型之一是表达式,因此可以将任何表达式用作语句,包括a+b;,a=b;,a=b,a+b

不能用逗号分隔两个C语句。但是,您可以用逗号分隔两个C表达式,因为,是一个按顺序计算其两个操作数的运算符,先是左操作数,然后是右操作数,最后返回右操作数


此外,a=b是一个表达式。但是,可能的C语句类型之一是表达式,因此可以将任何表达式用作语句,包括a+b;,a=b;,a=b,a+b

逗号运算符:在C中最常见的逗号运算符是在具有多个初始化的for循环中。许多语言以类似的方式支持逗号运算符,包括C++、爪哇、C和perl。逗号运算符:在C中看到逗号运算符的最常见的地方是在for循环中有多个初始化。许多语言以类似的方式支持逗号运算符,包括C++、爪哇、C和Perl.thanks。现在我看到了不同类型的c语句,其中之一是表达式。在学习了如何造句之后,我感觉自己在问什么是a,b,c,d,e。不管怎样,很高兴把它弄清楚。谢谢你的帮助。现在我看到了不同类型的c语句,其中之一是表达式。在学习了如何造句之后,我感觉自己在问什么是a,b,c,d,e。不管怎样,很高兴把它弄清楚。谢谢你的帮助。
#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 $