在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);
}