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

原文地址:https://www.cnblogs.com/Neddy/p/2335399.html