在C++中使用预定义宏

在C++学习中,我们不难发现许多预定义的宏,如:

注意:这些预定于宏完全是由编译器实现的,因此请注意各种平台移植的问题。

直接使用预定义宏:

复制代码
#include <stdio.h>

int main() {
    printf("[File:%s][Fun:%s][Line:%d] show my log\n", __FILE__, __func__, (int)__LINE__);
    printf("[File:%s][Fun:%s][Line:%d] %d + %d = %d\n", __FILE__, __func__, (int)__LINE__, 1, 2, 1 + 2);
}

可见,这么写实在是太长了,对于这种情况,我们可以把这个操作定义为一个宏。

由于需要传递打印的信息,因此这是一个宏函数,若要使用占位符号,则需要遵循变参宏的使用规则。

封装成宏函数:

此处使用不同的宏,表示不通用的日志分类。

复制代码
#include <stdio.h>

#define DEBUG_LOG(fmt, ...)                                                 \
    do {                                                                    \
        printf("Debug:[File:%s][Fun:%s][Line:%d] " fmt, __FILE__, __func__, \
               (int)__LINE__, ##__VA_ARGS__);                               \
    } while (0)

#define INFO_LOG(fmt, ...)                                                 \
    do {                                                                   \
        printf("Info:[File:%s][Fun:%s][Line:%d] " fmt, __FILE__, __func__, \
               (int)__LINE__, ##__VA_ARGS__);                              \
    } while (0)

#define WARNING_LOG(fmt, ...)                                                \
    do {                                                                     \
        printf("Waring:[File:%s][Fun:%s][Line:%d] " fmt, __FILE__, __func__, \
               (int)__LINE__, ##__VA_ARGS__);                                \
    } while (0)

int main() {
    DEBUG_LOG("use debug log\n");
    INFO_LOG("%d + %d = %d\n", 1, 2, 1 + 2);
    WARNING_LOG("%d + %d = %d\n", 1, 2, 4);
}
相关推荐
骑着蜗牛撵大象3272 分钟前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
Eyfcom5 分钟前
〖阶段性回顾〗物流系统架构与算法的 Day 1-5 知识图谱与实战答疑
算法·系统架构·知识图谱·物流管理系统·快递管理系统
xunberg9 分钟前
【Agent 生产化手记-02】Agent 怎么向人提问
人工智能·算法·架构
海绵宝宝转agent15 分钟前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先
青峰讲运维25 分钟前
OpenStack Heat 编排:用模板一键交付云业务,告别手动点页面
开发语言·php·openstack
pjj1985439 分钟前
YOLO 目标检测算法系列梳理:从 V1 到 V5 的原理演进
算法·yolo·目标检测
MyFreeIT1 小时前
Python Windows Manual
开发语言·python
kiracrimson1 小时前
STL:List的使用和模拟实现
开发语言·c++·list
二十七日秋1 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
晚风叙码1 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法