#include#include using namespace std; #define ONE_PARM(parm1) printf("第一个参数为字符%-2cn",(parm1)) #define TWO_PARM(parm1, parm2) printf("第一个参数为字符%-2c,第二个参数为整数%-5dn",(parm1),(parm2)) #define THREE_PARM(parm1, parm2, parm3) printf("第一个参数为字符%-2c,第二个参数为整数%-5d,第三个参数为字符串%-20sn",(parm1),(parm2),(parm3)) #define GET_PARM(_1,_2,_3,func,...) func #define PRINTF(...) GET_PARM(__VA_ARGS__, THREE_PARM, TWO_PARM, ONE_PARM,...)(__VA_ARGS__) int main(){ int num=1; char ch='A'; string str = "string"; ONE_PARM(ch); TWO_PARM(ch,num); THREE_PARM(ch,num,str.c_str()); PRINTF(ch); PRINTF(ch,num); PRINTF(ch,num,str.c_str()); return 0; }
代码结果:
对于上述的代码,我们定义了宏定义形式的变参函数PRINTF(),它可以接受1至3个参数,当然,这三个参数要符合宏定义中参数的形式,比如第一个必须时字符,第二个必须是整数,第三个必须是字符串,不然就会报错。第一个参数为字符A
第一个参数为字符A ,第二个参数为整数1
第一个参数为字符A ,第二个参数为整数1 ,第三个参数为字符串string
第一个参数为字符A
第一个参数为字符A ,第二个参数为整数1
第一个参数为字符A ,第二个参数为整数1 ,第三个参数为字符串string



