#include#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)就不合法
posted on 2012-02-02 10:19 阅读( ...) 评论( ...) 收藏