我遇到了这个代码片段1
int return_printChar1()
{
// code
// oops! no return statement
}
int return_printChar2()
{
// code
return printf("Return");
}
int main()
{
int i;
// some more code
i = return_printChar2();
if((return_printChar1(),i))
{
printf ("Gotcha");
}
}
1:这不是现实生活中的例子。
我的问题是“代码片段的行为是否在 C 和 C++ 中定义良好? ”
我的看法:
在 C 中,行为是明确定义的,因为6.5.17
说
逗号运算符的左操作数被评估为 void 表达式;在其评估之后有一个序列点
在 C++03 中,行为定义明确,因为5.18
说
一对用逗号分隔的表达式从左到右求值,左边表达式的值被丢弃。
然而 C++03 (in section 6.6.3
) 也说
从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。
同样在 C
如果控制到达
}
非 void 函数的 end ( )(除了main()
),则行为未定义。
因此,考虑到所有这些点,我无法判断实际行为。你们怎么看?
PS:如果你认为这个问题没用,并且你有更好的事情要做,请自助:D。