#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)就不合法