相关疑难解决方法(0)

逗号运算符和void表达式

我遇到了这个代码片段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");
   }
}
Run Code Online (Sandbox Code Playgroud)

1:这不是一个真实的例子.

我的问题是" 在C和C++中是否很好地定义了代码片段的行为? "

我的看法:

在C中,行为很明确,因为6.5.17

逗号运算符的左操作数被计算为 void表达式 ; 评估后有一个序列点

在C++ 03中,行为很明确,因为5.18

由逗号分隔的一对表达式从左到右计算,并且左表达式的值被丢弃.

但是,C++ 03(部分6.6.3)也说明了这一点

流出函数的末尾相当于没有值的return; 这会导致值返回函数中的未定义行为.

同样在C中

如果控制到达}非void函数的end()(除外main()),则行为未定义.

因此,考虑到所有这些要点,我无法判断实际行为.你觉得怎么样?

PS:如果你觉得这个问题没用,你有更好的事情要做,那就自己帮忙吧:D.

c c++ comma-operator undefined-behavior

8
推荐指数
1
解决办法
1232
查看次数

标签 统计

c ×1

c++ ×1

comma-operator ×1

undefined-behavior ×1