libnids中的两个宏
如下是libnids中定义的两个宏,这两个宏都包含了多个语句,看起来很复杂的样子。这两个宏定义其实是有潜藏的问题的,具体看本文第二部分中的“辅助定义复杂的宏,避免引用的时候出错”。
#define START_CAP_QUEUE_PROCESS_THREAD() \
if(nids_params.multiproc) { /* threading... */ \
if(!(g_thread_create_full((GThreadFunc)cap_queue_process_thread,NULL,0,FALSE,TRUE,G_THREAD_PRIORITY_LOW,&gerror))) { \
strcpy(nids_errbuf, "thread: "); \
strncat(nids_errbuf, gerror->message, sizeof(nids_errbuf) - 8); \
return 0; \
}; \
}
#define STOP_CAP_QUEUE_PROCESS_THREAD() \
if(nids_params.multiproc) { /* stop the capture process thread */ \
g_async_queue_push(cap_queue,&EOF_item); \
}
神奇的do{...}while(0)
http://www.spongeliu.com/415.html