【问题标题】:Is such code legal?这样的代码合法吗?
【发布时间】:2012-08-04 12:01:05
【问题描述】:

我一直在使用一个使用 GCC 4.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;

【问题讨论】:

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

标签: c pointers standards c99


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多