以下代码在我使用短路或(|
)时会出现段错误,并在没有短路(||
)时完美编译?
使用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() */
答案 0 :(得分:7)
您应该使用||
(逻辑或运算符)而不是|
(按位或运算符)。前者短路而后者短路不,因此出现分段故障。
答案 1 :(得分:2)
按位Or(|
)不能短路,因为它不是布尔表达式的一部分。它只是一个操作(就像一个总和),因此必须执行每一边才能生成实际上是函数返回的两个值的每位or
的结果