#include <stdio.h>
#define test(x) test ## x
#define DPRINT( fmt, args...) \
{ \
printf
(
'File : %s Funtion : %s Line : %d \t'
, __FILE__, __FUNCTION__, __LINE__ );\
printf
( fmt, ##args );\
}
void
test1(
int
a)
{
DPRINT(
'Integer : %d \n'
, a);
}
void
test2(
char
*s)
{
DPRINT(
'String : %s \n'
, s);
}
int
main(
void
)
{
test(1)(100);
test(2)(
'hello'
);
return
0;
}
打印信息:
***************************************************
File : test.c Funtion : test1 Line : 11 Integer : 100
File : test.c Funtion : test2 Line : 16 String : hello
***************************************************
#define DPRINT( fmt, args...) \
{ \
printf('File : %s Funtion : %s Line : %d \t', __FILE__, __FUNCTION__, __LINE__ );\
printf( fmt, ##args );\
}
这样定义宏有个问题, 标准printf()函数有返回值, 只是我们很少用
另外一种定义:
#define DPRINT( fmt, args...) \
printf('File : %s Funtion : %s Line : %d \t'fmt, __FILE__, __FUNCTION__, __LINE__ ,##args )
fmt不能为指针
*****************************************
const char *s= 'string';
printf(s);
*****************************************
是合法的,可以打印出string
但DPRINT(s)就不合法
联系客服