c - 奇怪的条件检查

标签 c while-loop conditional-statements

让我们考虑以下 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 分别宏化为 FALSETRUE。并且 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_1false(即 0)且函数返回值 时执行code>foo_returns_0_or_1true(即不是 0)。

如果不满足任何一个条件,则 body 将被跳过。

关于c - 奇怪的条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42302765/

相关文章:

c - 定义要用变量值读取的 scanf 字符串字母的值

cakephp - 如何按条件过滤关联模型?

MySQL WHERE 与 IF 条件

c - 出现不需要的换行符

C:两个void指针的区别是什么类型?

java - 用 while 循环计算两个因子?

c++ - 限制项目条目 C++

java - while(true) 中断后 while 循环打印错误语句

vba - 图例条目、范围、饼图、删除、条件

c - 遍历有和没有下一个字段的链表