在c中的单个语句中分配和比较

L L*_*iet 0 c

如何将以下代码转换为单行?

int *i;
i = some_func_ret_int_ptr();
if(!i)
{
   // do something
}
// Will use i later
Run Code Online (Sandbox Code Playgroud)

我想做点什么

if((i=some_func_ret_int_ptr) && !i)
{
   //do something
}
// Will use i later
Run Code Online (Sandbox Code Playgroud)

但我在这里浪费一个比较.我有更好的方法吗?我想要的只是if中的赋值和比较,只比较i.

Gil*_*pie 7

有了C,这就是你可以打高尔夫球:

int *i;
if(!(i = some_func_ret_int_ptr()))
{
   // do something
}
// Will use i later
Run Code Online (Sandbox Code Playgroud)

  • 咦?它在功能上等同于您提供的代码.它只会评估分配失败(或者分配为0). (3认同)
  • @Siddharth:“分配成功”是什么意思?分配如何“成功”或“不成功”? (2认同)

AnT*_*AnT 6

除了其他答案中建议的内容外,您还可以这样做

if (i = some_func_ret_int_ptr(), !i)
{
  // Do something
}
Run Code Online (Sandbox Code Playgroud)

它是您最初的文字实现,语句序列替换为由,运算符分隔的表达式序列。

不过,这没有多大实际意义。

  • 你可以用`if(!(i = …))`来表达同样的事情 (5认同)