日常使用的C语言宏帮助打log
项目陷入僵局,写个blog放松一下。
cpp
在debug
或者打log
的时候可以借助一些宏定义让我们强行更便捷。下面介绍几个自己在写cpp
时候常用的几个宏。(部分宏是C99新增的,要注意编译器支持不支持)
#
##
#
的效果简单说是把跟在后面的东西变成字符串。例子如下:
#define LOG(x) cout<<#x<<":"<<x<<endl;
int t = 2;
LOG(t);
实际输出:
t:2
##
的效果简单说是对字符串做拼接。例子如下:
#define X(n) x##n
#define LOG(x) cout<<#x<<":"<<x<<endl;
int X(1) = 2;
LOG(x1);
实际输出:
x1:2
__FUNCTION__
__FUNCTION__
的效果简单说是取函数名。例子如下:
#define LOG(x) cout<<#x<<":"<<x<<endl;
void call_foo(){
LOG(__FUNCTION__);
}
int main(){
call_foo();
return 0;
}
实际输出:
__FUNCTION__:call_foo
...
__VA_ARGS__
...
__VA_ARGS__
常配合使用,用于省略参数。例子如下:
#define LOG(...) printf("test %d and %s",__VA_ARGS__)
int t=2;
LOG(t,"hello");
实际输出:
test 2 and hello