C语言中#和##的用法

今天在看FreeRTOS代码看到如下代码:

开机初始化:

log_create_module(template, PRINT_LEVEL_INFO);


宏定义:

#define log_create_module(_module, _level) \

log_control_block_t log_control_block_##_module = \
{ \
    #_module, \
    (DEBUG_LOG_ON), \
    (_level), \
    print_module_log, \
    dump_module_buffer \
}

#endif /* MTK_DEBUG_LEVEL_NONE */

此部分利用#difine宏定义一个类型为log_control_block_t 的log_control_block_##_module 并做初始化

在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。


以下是log_control_block_t的结构体定义:

/**
 * @brief log context definition
 */
typedef struct {
    const char *module_name;
    log_switch_t    log_switch;
    print_level_t   print_level;
    f_print_t       print_handle;
    f_dump_buffer_t dump_handle;
} log_control_block_t;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值