我想构造一些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
语句,但我总是不能让它按照现有的编码方式工作。
你的 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;
}