【发布时间】:2019-03-18 18:09:13
【问题描述】:
当我忘记用分号结束变量初始化而是使用逗号时,我的代码中出现了错误。然而,令我惊讶的是,它从未返回错误并且代码运行正常。
因此我想知道这是如何工作的?我通过编写以下代码简化了我的代码;
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 %u\n", __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
【问题讨论】:
-
不从声明为返回的函数返回只是未定义的行为。未定义的行为实际上意味着任何事情都可能发生,包括看起来有效。
-
@alterigel 虽然这是真的,但这不是 OP 混乱的直接原因。
-
@alterigel 如果在表达式中使用该函数的返回值,这只是未定义的行为。如果没有,则没有 UB。
标签: c++ c gcc gcc-warning