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