在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);
}
相关推荐
大雨淅淅4 分钟前
【机器人】ROS2 机械臂控制(MoveIt2)从入门到实战
人工智能·python·神经网络·学习·算法·机器学习·机器人
闪电悠米5 分钟前
黑马点评-秒杀优化-04_lua_and_db_fallback
服务器·开发语言·网络·数据库·缓存·junit·lua
Shadow(⊙o⊙)10 分钟前
进程间通信0.0-pipe()匿名管道,详细分析进程池调度队列执行逻辑,进程池模拟实现。
linux·运维·服务器·开发语言·c++
lcj251114 分钟前
【list】【手撕 STL】List 容器全解析!迭代器 / 增删改查 / 去重排序,面试必背的核心考点!
c++·面试·list
指尖的爷17 分钟前
C++头文件的作用
开发语言·c++
keykey6.17 分钟前
反向传播与梯度下降:神经网络如何学习
开发语言·人工智能·深度学习·机器学习
Jun62624 分钟前
QT(5)-第三方日志系统
开发语言·数据库·qt
冰暮流星27 分钟前
javascript建立对象之构造函数
开发语言·javascript·ecmascript
keykey6.34 分钟前
PyTorch 入门实战:从张量到训练循环
开发语言·人工智能·深度学习·机器学习
智者知已应修善业34 分钟前
【51单片机0.1秒计时到21.0时点亮LED】2024-1-5
c++·经验分享·笔记·算法·51单片机