C变量声明丢失

时间:2016-09-12 16:38:35

标签: c

我遇到了以下代码,我不明白这个变量“win”如何在没有声明的情况下在这里工作?

//The following code is in a header file
static inline void Win_unlink(list_t * list, Win * shm_win)
{
    SHM_Win_t *elem = NULL;
    SHM_Win_t *tmp_elem = NULL;

    SEARCH_SCALAR(*list, elem, win, shm_win);
    if (elem != NULL) {
        tmp_elem = elem;
        MPL_DL_DELETE(*list, elem);
        MPL_free(tmp_elem);
    }
}

#define SEARCH_SCALAR(head,out,field,val) SEARCH_SCALAR_N(head,out,field,val,next)
#define SEARCH_SCALAR_N(head,out,field,val,_next)                                       \
do {                                                                                           \
    FOREACH_N(head,out,_next) {                                                         \
      if ((out)->field == (val)) break;                                                        \
    }                                                                                          \
} while(0)

我查看了包含的头文件,但没有变量声明为“win”。我也查看了调用此函数的地方,我也没有找到“win”的声明。我使用cscope寻找win的全局定义,但我没有看到它。

1 个答案:

答案 0 :(得分:2)

查看SEARCH_SCALARSEARCH_SCALAR_N的定义,我认为win不是一个独立变量。它代表struct的字段/成员。

  if ((out)->field == (val)) break;
             ^^^^ that's win in your use.