在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);
}
相关推荐
Data_Journal1 小时前
使用Python lxml轻松进行网络爬取
开发语言·php
xcLeigh2 小时前
IoTDB JDBC 完整使用教程:连接、查询、批处理与字符集配置
开发语言·数据库·qt·iotdb·查询·批处理·连接
学会870上岸华师2 小时前
C 语言程序设计——第一章课后编程题
c语言·开发语言·学习·算法
小小编程路2 小时前
新手快速学 Python 极简速成指南
开发语言·c++·python
小马过河R2 小时前
RAG检索优化策略:系统性四层框架解析
人工智能·python·算法·ai·llm·rag·问答
AI技术控2 小时前
论文解读:AE-TCN-SA——基于自编码器、TCN 与自注意力机制的锂电池内短路诊断方法
人工智能·python·深度学习·算法·机器学习·自然语言处理
ʚ希希ɞ ྀ2 小时前
动态规划基础知识---爬楼梯
算法·动态规划
rabbit_pro2 小时前
SpringBoot3集成Langchain4j使用Ollama
java·开发语言
宏笋2 小时前
C++ 约束模板参数Concepts详解
c++