c ++单行if / else语法

时间:2014-02-17 18:28:23

标签: c++ apache

这个codenippet让我困惑:

/* First off, we need to check if this is a call for the "example-handler" handler.
 * If it is, we accept it and do our things, if not, we simply return DECLINED,
 * and the server will try somewhere else.
 */
if (!r->handler || strcmp(r->handler, "example-handler")) return (DECLINED);

[Source]

它说:“检查这是否是对”example-handler“处理程序的调用。如果不是,我们只返回DECLINED ,”

我认为“if(strcmp(r-> handler;”example-handler“))return(DECLINED)”意味着如果字符串比较返回true,那么如果它是对example-handler的调用, DECLINED将被退回。

3 个答案:

答案 0 :(得分:2)

本声明

if (!r->handler || strcmp(r->handler, "example-handler")) return (DECLINED);

装置

如果r->处理程序等于NULL,则返回DECLINED

或者如果r->处理程序不等于NULL但它的内容不等于字符串文字“example-handler”,那么也返回DECLINED

标准C函数strcmp如果两个操作数彼此相等则返回0,否则返回非零值。

那个表达

strcmp(r->handler, "example-handler") != 0

表示操作数彼此不相等。

来自C标准

  

strcmp函数返回一个大于,等于的整数,或者   小于零,因此s1指向的字符串更大   比,等于,或者小于s2指向的字符串

答案 1 :(得分:0)

看起来很正确。 strcmp如果匹配则返回0。因此,您将继续评论建议。

答案 2 :(得分:0)

这个条件:

if (!r->handler || strcmp(r->handler, "example-handler")) return (DECLINED);

可以更明确地重写为:

if (r->handler == NULL /* or nullptr in C++11 */ || strcmp(r->handler, "example-handler") != 0) return (DECLINED);

这基本上意味着它在以下情况下返回DECLINED:

  1. 处理程序未提供
  2. OR strcmp返回非零。
  3. 在strcmp的手册页中,你可以发现strcmp在字符串不同时返回非零值:

      

    strcmp()函数比较两个字符串s1和s2。如果找到s1,则返回小于,等于或大于零的整数,小于,匹配或大于s2。