在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);
}
相关推荐
鹿角片ljp1 分钟前
LeetCode 236. 二叉树的最近公共祖先|递归后序
算法
luj_176813 分钟前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
无定义_18 分钟前
Floyd——Warshall
算法
刃神太酷啦36 分钟前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
带多刺的玫瑰1 小时前
Leecode#9刷题之回文数
数据结构·算法
leonkay1 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
harmful_sheep1 小时前
java group by常见用法
java·开发语言·python
泯泷2 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
SKH.2 小时前
Linux软件编程(6)线程间通信
java·开发语言·数据库
泯泷2 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法