C语言函数参数 args,C语言--#、##、__VA_ARGS__ 和##__VA_ARGS__ 的使用

#  用来把参数转换成字符

#include

#define FUN(X) (printf("%s=%d\n",#X,X)) /* #用来把参数转换成字符 */

int test(int argc, char ** argv)

{

int a = 1;

int b = 2;

FUN(a);

FUN(b);

FUN(a+b);

return 0;

}

/** 程序输出结果:

*******************************

a=1

b=2

a+b=3

*******************************

*/

2、## 把两个语言符号组合成单个语言符号

#include

#define XNAME(n) x##n /* ## 这个运算符把两个语言符号组合成单个语言符号*/

#define PXN(n) printf("x"#n" = %d\n",x##n)

int main(int argc, char ** argv)

{

int XNAME(1) = 10886; /*宏展开就是:x1 = 10086*/

PXN(1); /*宏展开就是:printf("x1 = %d\n",x1) */

return 0;

}

/** 程序输出结果:

*******************************

x1 = 10886

*******************************

*/

3、__VA_ARGS__ 和 ##__VA_ARGS__

#include "stdio.h"

#define DEBUG1(format, ...) do{ \

printf(format, __VA_ARGS__); \

\

} while(0)

#define DEBUG2(format, args...) do{ \

printf(format, ##args); \

\

} while(0)

#define DEBUG3(format, ...) do{ \

printf(format, ##__VA_ARGS__); \

\

} while(0)

int

main(int argc, char **argv)

{

printf("hello world.1 \n");

//DEBUG1("hello world.2\n");//错误 参数为零

DEBUG1("hello world.2 %d %d\n", 1, 2);

DEBUG2("hello world.3\n");

DEBUG2("hello world.3 %d %d %d\n", 1, 2, 3);

DEBUG3("hello world.4\n");

DEBUG3("hello world.4 %d %d %d %d\n", 1, 2, 3, 4);

return 0;

}

应用:

#include "stdio.h"

#define DEBUG_ON

#ifdef DEBUG_ON

#define DEBUG(format, ...) do{ \

printf("File:%s, Line:%d, "format"", __FILE__, __LINE__, ##__VA_ARGS__); \

\

} while(0)

#else

你可能感兴趣的:(C语言函数参数,args)