试图理解IF语句的逻辑。

问题描述 投票:0回答:1

我想构造一些Ada代码,但要做到这一点,我必须了解一些C语言。

在net-snmp-5.8.1.pre2appssnmpbulkwalk.c中,可能还有其他的一些地方,有一个叫做 if 语句,我正试图了解发生了什么,并将其分离出来,因此。

if ((vars->name_length < rootlen) || (memcmp(root, vars->name, rootlen * sizeof(oid))) != 0) {
   /*
    * not part of this subtree
    */
    running = 0;
    continue;
}

我得到 name_length < rootlen,我也得到了 memcpy 总是返回一个指针,而且从未失败。以我可怜的视力来看,它似乎是说如果 < 失败,它将尝试 memcpy 始终成功,然后执行IF块的内容。但是没有... 如果是这样的话,你可以直接把那个 memcpy 块内。

无论我如何分离出 if 语句,但我总是不能让它按照现有的编码方式工作。

c snmp
1个回答
1
投票

你的 if 做 "短路 "评价。它基本上是这样的形式。

if (expression_A || expression_B)
    do_something;

它评估的是 expression_A,如果它是 真正, expression_B 评价的。而且,该。if采取 (即 do_something 被执行)

如果 expression_A假的那么 expression_B 是评估。如果 真正జజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ if采取

重述实际 if 守则。

if (vars->name_length < rootlen) {
   /*
    * not part of this subtree
    */
    running = 0;
    continue;
}

if (memcmp(root, vars->name, rootlen * sizeof(oid)) != 0) {
   /*
    * not part of this subtree
    */
    running = 0;
    continue;
}

重述一般情况:

if (expression_A)
    do_something;
else {
    if (expression_B)
        do_something;
}
© www.soinside.com 2019 - 2024. All rights reserved.