让我们考虑以下 C 代码片段。
while(!var_can_be_0_or_1 && foo_returns_0_or_1(arg1, arg2)) {
body;
}
这是一个简单的 while 条件语句,它执行我无法理解的操作。但是假设我有两个宏
#define TRUE 1
#define FALSE 0
有人可以告诉我(或者更确切地说是向我解释)我们在这个 while 循环的条件下检查什么吗?我的意思是循环体将在什么条件下执行以及它将跳过什么条件?
阐述
我在一本关于数据结构的书中找到了它,该程序将中缀表达式字符串转换为后缀字符串。确切的代码是这样的--->
int prcd(char char);
int und, outpos;
char symb, topsymb;
while(!und && prcd(topsymb, symb)) { <----- Stuck on this one real bad
postr[outpos++] = topsymb;
popandtest(&opstk, &topsymb, &und);
}
详细说明可能是不必要的,只是为了将事情放在上下文中。 ;)
编辑:
如果这个问题对于想要提供帮助的人来说有些不清楚,我真的很抱歉,所以我会更多地解释一下我在这里真正要问的是什么
让我们忘记我在本文详细部分编写的代码,回到第一个代码,假设我们有一个 while 循环,简单明了的 while 循环
while(!condition1 && condition2) {
execute some codes;
}
这里,condition1
= und
,und 是一个 int,其值可以是 0 或 1(除此之外别无他法)。 0 和 1 分别宏化为 FALSE
和 TRUE
。并且 condition2
= prcd(topsymb, symb)
;它是一个函数,其原型(prototype)被称为 int prcd(char char);
。它再次返回 0 或 1,没有别的。
现在我想知道的是如何评估while
循环括号内的条件。
希望这能解决问题。 :)
最佳答案
I mean in what condition/s the loop body will execute and in which condition/s it will skip
body
将在 var_can_be_0_or_1
为 false
(即 0
)且函数返回值 时执行code>foo_returns_0_or_1
为 true
(即不是 0
)。
如果不满足任何一个条件,则 body
将被跳过。
关于c - 奇怪的条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42302765/