3.1. 利用变参宏的能力 #define PP_ARG_X(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9, \a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, \A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,XX,...) XX#define PP_ARG_N(...) \PP_...
如果你在宏调用时,确实提供了一些可变参数,GNU CPP也会工作正常,它会把这些可变参数放到逗号的后面。象其它的pasted macro参数一样,这些参数不是宏的扩展。 怎样写参数个数可变的宏 一种流行的技巧是用一个单独的用括弧括起来的的 ``参数" 定义和调用宏, 参数在 宏扩展的时候成为类似 printf() 那样的函数...
模拟printf的入参形式,达到如下目的: 某系统日志函数入参过多,在同一模块有很多重复的参数,希望能够减少输入,按照const char *format, ...的形式输入需要显示的内容。 研究结果: 在GCC编译环境下 使用GCC的变参宏(Varadic Macros)扩展实现: 1/*2* main.c3*4* Created on: 2015年1月29日5* Author: lucif...
求解:变参宏定义 看《xxx的自我修养》里面有一段关于“变长参数宏”的代码: #include<stdio.h> #defineprintf(args ) fprintf(stdout, ##args) intmain() { printf("\n%d, %s\n",0,"test"); return0; } 代码不长,编译也未见问题,结果也正常,演示了其想说明的部分。根据其意,‘##’宏用于字符串...
ONE(arg) 1// 目前被映射的列表不能为空,被应用的宏至少会展开一次// 假设列表可能为空,...
如果去掉前后缀,就无法处理0参数问题。可以用我定义的获取变参宏的参数个数,兼容gcc/clang/msvc,尤其...
define PRINT(args)\ printf("PRINT:\t%s\t%i\n", __FILE__, __LINE__);printf args;\ printf("\n")调用的时候 PRINT( (参数列表) );用加括号的办法,不过用起来怪怪的 建议使用inline变参函数!
// 变参宏: __VA_ARGS__ // ...只能放在最后 #define PR(X, ...) printf("Message " #X ": "__VA_ARGS__)// 对于简单函数,通常使用宏定义, 可以减少程序在函数中跳转,从而提高运行效率. // 在嵌套循环中使用宏更有助于提高效率 #define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) #...
1#5"va.c"2intmain(void)3{4doublex =48;5doubley;67y =sqrt(x);8printf("MSG""1"":""x = %.2lf\n",x);9printf("MSG""2"":""x = %.2lf , y = %.4lf\n",x,y);1011return0;12} 结果: MSG1:x =48.00MSG2:x=48.00, y =6.9282...
c中支持变参宏和__VA_ARGS__ 本人之前写过一篇关于c语言中宏用法的文章,需要的可以查看此篇文章>https://www.cnblogs.com/fulai-hou/articles/15520121.html>,这一篇主要讲gcc中专门支持的关于宏的参数的语法。 使用保留名__VA_ARGS__来将参数传递给宏 ...