【发布时间】:2020-08-27 21:19:54
【问题描述】:
我有三个变量:a、b、c。假设它们是整数。我想以特定顺序找到其中的第一个非零值,而无需循环。以下似乎可行,但我不确定这是因为我很幸运,还是因为语言保证了它:
int main(int argc, char *argv[]) {
int a = 0;
int b = 3;
int c = 5;
int test;
if ((test = a) != 0 || (test = b) != 0 || (test = c) != 0) {
printf("First non-zero: %d\n", test);
} else {
printf("All zero!\n");
}
return 0;
}
此处显示的短路重复分配是否可以保证按预期工作,还是我遗漏了什么?
这可能是一个可以接受三个字母答案的地方,但两个字母的答案可能需要更多解释。
【问题讨论】:
-
我会说它有效,但它很疯狂 - 尽管来自 Mad Physicist 是有道理的。
-
@chux-ReinstateMonica。忠于自己和所有人......还有什么选择会不那么疯狂?
-
@chux-ReinstateMonica:叫我疯狂查理:
test = a + !!a * (b + !!b * c);
标签: c