C 这样的守则合法吗?

C 这样的守则合法吗?,c,pointers,standards,c99,C,Pointers,Standards,C99,我一直在使用一个使用GCC4.4.1(ISO C99)编译的程序,今天我注意到了这个怪癖。虽然它在目标上工作没有任何问题,但编译器也不会使用-Wall发出任何警告 void mutex_init(mutex_t *mutex) { if(unlikely(mutex->magic == MUTX_MAGIC_CHAR)) return; mutex->owner = NULL; mutex->prior = NULL; mutex->magic = MU

我一直在使用一个使用GCC4.4.1(ISO C99)编译的程序,今天我注意到了这个怪癖。虽然它在目标上工作没有任何问题,但编译器也不会使用-Wall发出任何警告

void mutex_init(mutex_t *mutex)
{
 if(unlikely(mutex->magic == MUTX_MAGIC_CHAR))
    return;

 mutex->owner = NULL;
 mutex->prior = NULL;
 mutex->magic = MUTX_MAGIC_CHAR;
 thread_queue_init(&mutex->queue);
}
难道不是这样吗

*mutex->owner = NULL;

不,
magic->owner
等同于
(*magic).owner


->
运算符用于处理指向结构的指针,而
运算符直接处理结构。

否,
magic->owner
相当于
(*magic)。owner


->
运算符用于处理指向结构的指针,而
运算符直接处理结构。

我不相信这会毫无警告地编译:括号不平衡。这是复制粘贴问题。。现在修复它。我相信这不会在没有警告的情况下编译:括号不平衡。这是复制粘贴问题。。现在修好它。