Linux C使用宏字符拼接技巧打印日志并统计错误

c语言的宏因为本质是字符替换,不是类型安全的行为,但也因为其字符替换的本质使其具有了一些编译期的动态特性,对于一些特殊的场合就非常的有用,比如下面的打日志。
宏的使用这篇文章写的很不错,C语言宏的特殊用法和几个坑.

#include <stdio.h>

typedef enum
{
    ERROR_ONE,    // 0
    ERROR_TWO,
    ERROR_THREE,
    ERROR_END
}E_ERROR_CODE;

unsigned long g_error_statistics[ERROR_END] = {0};

/* LOG 打印, # 直接常亮字符串替换 */
#define LOG_PRINT(ERROR_CODE)                                             \
do {                                                                      \
    g_error_statistics[ERROR_CODE]++;                                     \
    printf("[%s : %d], error is %s\n", __FILE__, __LINE__, #ERROR_CODE);  \
} while (0)

/* ERROR 公共前缀,传参时省略的写法, ## 直接展开拼接 */
#define LOG_PRINT_2(CODE)                                                        \
do {                                                                             \
    g_error_statistics[ERROR_ ## CODE]++;                                        \
    printf("[%s : %d], error is %s\n", __FILE__, __LINE__, "ERROR_" #CODE);      \
} while (0)


int main()
{
    LOG_PRINT(ERROR_TWO);
    LOG_PRINT_2(ONE);
    for (unsigned int i = 0; i < ERROR_END; ++i) {
        printf("error %u statistics is %lu \n", i, g_error_statistics[i]);
    }
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值