0

|次のコードは、short-or( )を使用するたびにsegfaultを実行し、short-circuit( )を使用しない場合は問題なくコンパイルされ||ますか?

を使用してコンパイル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() */
4

2 に答える 2

7

ビット単位または演算子)の代わりに||論理または演算子)を使用する必要があります。前者は短絡しますが、後者は短絡しないため、セグメンテーション違反が発生します。|

于 2012-09-22T16:57:01.697 に答える
2

ブール式の一部ではないため、ビット単位のOr(|)を短く循環させることはできません。これは単なる演算(合計のような)であるため 、関数によって返される2つの値のビットあたりのビット数である結果を生成するには、各側を実行する必要があります。or

于 2012-09-22T17:00:35.113 に答える