Linux C 中连接操作符##

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

你可能感兴趣的:(linux)