当我使用|时,为什么这个C代码会出现段错误而不是||?

时间:2012-09-22 16:49:03

标签: c

以下代码在我使用短路或(|)时会出现段错误,并在没有短路(||)时完美编译?

使用gcc -Wall ../IsNull/IsNull.c ../IsEmpty/IsEmpty.c *.c -o IsNullOrEmpty编译:

#include <stdbool.h>

#include "../IsNull/IsNull.h"
#include "../IsEmpty/IsEmpty.h"

#include "IsNullOrEmpty.h"

_Bool isNullOrEmpty (char *str);

_Bool isNullOrEmpty (char *str) {
    return (isNull (str) | isEmpty (str));     
} /* end of isNullOrEmpty() */

2 个答案:

答案 0 :(得分:7)

您应该使用||逻辑或运算符)而不是|按位或运算符)。前者短路而后者短路,因此出现分段故障。

答案 1 :(得分:2)

按位Or(|)不能短路,因为它不是布尔表达式的一部分。它只是一个操作(就像一个总和),因此必须执行每一边才能生成实际上是函数返回的两个值的每位or的结果