附上我计划在我的代码中使用的代码片段
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运行时)
答案 0 :(得分:10)
你所做的是语法和语义上的有效,因为逗号运算符评估每个子表达式并丢弃所有结果,但最后 1 。
但是,这非常不恰当。只写两个陈述。您将获得的唯一奖励是代码混淆。
<子> 1 - 你标记了C ++,所以当然有一个警告。运算符(包括逗号)可以重载。如果这是一个模板,那么在实例化模板之前,不能说这是否格式正确。你必须跳过一些箍来解决它。 子>
答案 1 :(得分:2)
这是有效的C(可能是C ++),因为它使用逗号运算符。
error("Less than zero"), 0
首先评估error
表达式,抛弃可能有的结果(它没有),然后评估0
,然后由你的函数return
进行评估