C 这样的守则合法吗?
我一直在使用一个使用GCC4.4.1(ISO C99)编译的程序,今天我注意到了这个怪癖。虽然它在目标上工作没有任何问题,但编译器也不会使用-Wall发出任何警告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
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
->
运算符用于处理指向结构的指针,而
运算符直接处理结构。我不相信这会毫无警告地编译:括号不平衡。这是复制粘贴问题。。现在修复它。我相信这不会在没有警告的情况下编译:括号不平衡。这是复制粘贴问题。。现在修好它。