您可以在表达式中使用 void 返回函数吗?

Can you use a void returning function in an expression

本文关键字:返回 void 函数 表达式      更新时间:2023-10-16

>附上是我计划在代码中使用的代码片段

void error(const char *text)
{
   printf("Error: %sn", text);
}
int isvalid(int stuff)
{
   if (stuff < 0)
      return (error("Less than zero"), 0);
   else
      return 1;
}

这是好的还是糟糕的编码?

return (error("Less than zero"), 0)行在我的编译器中没有报告错误

(Borland C++ V5.0 运行时)

您所做的在语法和语义上都是有效的,因为逗号运算符计算每个子表达式并丢弃除最后1 个之外的所有结果。

但它太不习惯了,很痛。只需写两个语句。您将赢得的唯一奖项是代码混淆。


1 - 您标记了C++,所以当然有一个警告。运算符(包括逗号)可以重载。如果这是一个模板,在模板实例化之前,无法说它是否格式正确。你必须跳过一些箍来修复它。

这是

有效的C(可能是C++),因为它使用逗号运算符

error("Less than zero"), 0

首先计算error表达式,丢弃可能具有(它没有)的任何结果,然后计算0,然后由您的函数return