我遇到了以下代码,我不明白这个变量“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的全局定义,但我没有看到它。
答案 0 :(得分:2)
查看SEARCH_SCALAR
和SEARCH_SCALAR_N
的定义,我认为win
不是一个独立变量。它代表struct
的字段/成员。
if ((out)->field == (val)) break;
^^^^ that's win in your use.