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_...
使用全局变量存储非varadic parameters的信息,利用可变参数函数模拟可变参数宏的实现: 1#include <stdio.h>2#include <stdarg.h>34intgInteger1;5intgInteger2;67#defineTEST_MACRO gInteger1 = 1; gInteger2 = 2;testFunc89voidtestFunc(constchar*format, ...)10{11charcArray[1000] = {0};12va_li...
使用保留名__VA_ARGS__来将参数传递给宏 #define debug(...) printf(__VA_ARGS__) 实例: PR("Howdy"); //宏展开后有一个参数printf("Howdy"); PR("weight = %d, shipping = $%.2f\n", wt, sp); //宏展开后有三个参数printf("weight = %d, shipping = $%.2f\n", wt, sp); 注意:在...
sum = 30 其实本质上就是用int arg[] = {VA_ARGS}对宏的变参部分构造了一个局部变量数组,便于求出参数的数量。 5月份注册的简书,今天才写第一篇文章啊,转载请注明出处哦^_^
第一个宏中由于没有对变参起名,我们用默认的宏__VA_ARGS__来替代它。第二个宏 中,我们显式地命名变参为args,那么我们在宏定义中就可以用args来代指变参了。同C语言的stdcall一样,变参必须作为参数表的最有一项出 现。当上面的宏中我们只能提供第一个参数templt时,C标准要求我们必须写成: ...
C语言,GCC4.6,测试环境VS6.0 模拟printf的入参形式,达到如下目的: 某系统日志函数入参过多,在同一模块有很多重复的参数,希望能够减少输入,按照const char *format, ...的形式输入需要显示的内容。 研究结果: 在GCC编译环境下 使用GCC的变参宏(Varadic Macros)扩展实现: ...