你能在表达式中使用void返回函数吗?

时间:2017-10-08 11:58:53

标签: c++ c

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

void error(const char *text)
{
   printf("Error: %s\n", 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运行时)

2 个答案:

答案 0 :(得分:10)

你所做的是语法和语义上的有效,因为逗号运算符评估每个子表达式并丢弃所有结果,但最后 1

但是,这非常不恰​​当。只写两个陈述。您将获得的唯一奖励是代码混淆。

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

答案 1 :(得分:2)

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

error("Less than zero"), 0

首先评估error表达式,抛弃可能有的结果(它没有),然后评估0,然后由你的函数return进行评估