我怎么能用逗号(,)分隔两个C语句? [重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我正在编辑我几天前写过的程序的源代码,并观察到一件有趣的事情。

我有以下两个陈述:

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 syntax
1个回答
4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.