1

我想知道是否将始终编译以下代码,以便没有非法的 NULL ptr 取消引用?

我担心的是编译器可能会在首先检查“b”是否为 NULL 之前检查 b->value。

typedef struct
{
    int value;
} mystruct;

int func(mystruct * b)
{
    if((NULL == b) || (b->value == 0))
    {
        return -1;
    }

    printf("value: %d\n", b->value);
}
4

3 回答 3

2

如果bis NULLthen(NULL != b)false,则将检查第二面。(请参阅Short-Circuit evaluation)并且您可能会得到 NULL ptr 取消引用。

更改||&&

于 2013-08-28T15:25:04.607 回答
2

是的,(NULL != b)将在之前进行测试(b->value == 0)

您所做的称为短路评估

于 2013-08-28T15:25:57.337 回答
0

您不必担心,除非结果尚未由第一个条件确定,否则不会执行第二个条件。

于 2013-08-28T15:26:43.650 回答