【发布时间】:2021-10-07 14:50:02
【问题描述】:
大家好:我有这样的表达方式:
if (a == 1) {
printf("hello\n");
}
有没有办法做这样的事情?
a== 1 && printf("hello\n");
这叫做短路表达式,但我对此一无所知。它存在于C中吗?怎么做。
【问题讨论】:
-
如果您有
if(a && b),如果a产生false,则不会评估表达式b。这是短路。但是,如果您的任何表达式有副作用,这是一个糟糕的设计 -
是的,这适用于 C:godbolt.org/z/TKc55Td6T 并不意味着您应该这样做。在大多数情况下,
if声明通常会更清晰。 -
即使是有效的 C 代码也不要这样做。除非您参加的是混淆 C 竞赛,否则请关注可读性。
-
你也有三元运算符方式:
a==1?printf("hello\n"):0;,反正这里的可读性不是很好。一个简单的if似乎是最有效和可读的。看看@alagner 的回答,从我的观点来看,内部三元的可读性较差。 -
您的两个示例都是完全相同的。一个更好的例子是两件事,例如
a == 1 && b == 2 && whatever与if (a== 1 && b == 2) { whatever }在这种情况下它们将完全相同。
标签: c if-statement printf expression short-circuiting