【C语言】宏定义中的##

项目代码中有这么一句,让我看了好久......真的是脑袋秀逗了

#define PORT_TASK_INIT(task_name)    task_##task_name##_create() 

##就是起到了连接的作用。

那么再看一些这个宏定义的意义:利用宏,将前一层封装好的函数,直接用。当我们想调用task_logic_create()接口,又要用到task_bat_create()等数十个接口,不用一次一次的写函数名了,太麻烦,万一写错呢,只需要利用宏函数,将具体的任务名字当做参数写进宏函数的参数中就可以调用具体的任务...... 

牛B啊!

 

又在项目中看到了这段代码:

void task_##task_name##_create(void)                                                                
{																									
	xTaskHandle task_handle = NULL;                                                  				
    xTaskCreate(task_##task_name##_function, #task_name, stack_size, NULL, priority,&task_handle); 
    queue_handle_##task_name = xQueueCreate(queue_size, sizeof(queue_msg_t));                       
    task_name = queue_handle_##task_name;                                                           
    vQueueAddToRegistry(queue_handle_##task_name, queue_name_##task_name);                          
    vTaskSetTaskNumber(task_handle, (UBaseType_t)queue_handle_##task_name);             			
}	

我刚才理解错了,宏替换都会替换掉##task_name##,然而上层并没有各种task_logic_create()这样类似函数,每一个任务创建的方式差不多,所以代码复用的话就直接一个void task_##task_name##_create(void)  解决。

牛B啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值