逗号分隔在声明变量时如何起作用

How does a comma separation function when declaring variables

本文关键字:起作用 变量 声明 分隔      更新时间:2023-10-16

我在某个时候曾在代码中犯了一个错误,当时我忘了用半隆结束可变初始化,而是放置了一个逗号。但是,令我惊讶的是,它永远不会返回错误,并且代码正常工作。

因此,我想知道这是如何工作的吗?我通过编写以下代码来简化代码;

uint32_t randomfunction_wret()
{
  printf("(%d:%s) - n", __LINE__, __FILE__);
  return 6;
}
uint32_t randomfunction()
{
  printf("(%d:%s) - n", __LINE__, __FILE__);
}
int main()
{
    uint32_t val32 = 3, randomfunction_wret(), valx = 6, randomfunction();
    printf("(%d:%s) - %u %un", __LINE__, __FILE__, val32, valx);
   return 0;
}

执行时返回;

(43:test.c) - 3 6

我很震惊,当我在初始化中分开功能时没有错误。但是,这些功能甚至都没有被调用。

===============

如果代码如下,从我所看到的,现在每个函数被称为;

int main()
{
    uint32_t val32;
    val32 = 3, randomfunction_wret(), randomfunction();
    printf("(%d:%s) - %u n", __LINE__, __FILE__, val32);
   return 0;
}

输出将为

(23:test.c) - 
(29:test.c) - 
(38:test.c) - 3 

uint32_t val32 = 3, randomfunction_wret(), valx = 6, randomfunction();

等于;

uint32_t val32 = 3;                // Defines and initializes the variable.
uint32_t randomfunction_wret();    // Re-declares the function. Nothing else is done.
uint32_t valx = 6;                 // Defines and initializes the variable.
uint32_t randomfunction();         // Re-declares the function. Nothing else is done.

函数中使用的变量已正确定义和初始化。因此,该功能毫无问题地起作用。


顺便说一句,randomfunction()的实现没有return语句。使用它会导致不确定的行为。


更新,响应编辑的帖子。

由于操作员优先级,该行

val32 = 3, randomfunction_wret(), randomfunction();

等效于:

(val32 = 3), randomfunction_wret(), randomfunction();

评估了逗号分离表达的所有子表达。因此,调用函数randomfunction_wretrandomfunction,并丢弃其返回值。