逗号分隔在声明变量时如何起作用
How does a comma separation function when declaring variables
我在某个时候曾在代码中犯了一个错误,当时我忘了用半隆结束可变初始化,而是放置了一个逗号。但是,令我惊讶的是,它永远不会返回错误,并且代码正常工作。
因此,我想知道这是如何工作的吗?我通过编写以下代码来简化代码;
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_wret
和randomfunction
,并丢弃其返回值。
相关文章:
- 通过 get-Method 访问变量在类外不起作用
- 键盘不起作用 - Arduino Uno - 与变量有关的多个错误
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 指针变量在 cout 函数中不起作用
- C++结构模板变量快捷方式定义不起作用
- C++ 互斥锁可以交叉方法/变量吗?如果是这样,为什么在这里不起作用?
- 变量和常数的C++划分不起作用
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 为什么变量算术不起作用?
- 为什么这个条件变量不起作用
- 在循环中更改数组的变量不起作用
- 使用模量来找出数字是否可以除去不起作用的变量
- 不同的变量和功能起作用
- 添加到私人变量不起作用
- 更改生成文件中变量的值不起作用
- 需要使用 Book* 头变量重载运算符,但不起作用
- 逗号分隔在声明变量时如何起作用
- SFINAE:检测成员变量的存在在 g++ 上不起作用
- 全球向量变量上的外部不起作用