#define REGISTER(NAME)

#define REGISTER(NAME)
偶遇一次一个结构体被定义并且初始化了,然后感觉没有被用到的样子,就觉得奇怪了,后来找了找才发现用 宏定义的一个操作(字符串拼接),通过函数调用来完成初始化的。写下来留作笔记O(∩_∩)O
#include
typedef struct data_handler{
		int m_product_type;
		struct data_handler *next;
} data_handler;
data_handler first_handler; 
data_handler mpbledemo2_data_handler=
{
	236,
	NULL
};

#define REGISTER(NAME)	\
		do {								\
				data_handler *tmp = &NAME##_data_handler;	\ //取输入的名字加上_data_handler这个变量的地址然后赋值完成初始化
				tmp->next = first_handler.next; \
				first_handler.next = tmp;	\
		} while(0)
		
static void register_all_products(void) 
{
	REGISTER(mpbledemo2);		//传入一半的名字调用宏定义完成初始化 如果这变量在另外一文件下定义你将全局搜索不到,但是却被初始化了
} 

int main()
{
	register_all_products();
	printf("the m_product_type value = %d\n",first_handler.next->m_product_type);
	return 0;
}
 
 

你可能感兴趣的:(#define REGISTER(NAME))