你想创建一个有两个甚至三个参数的定义这可能吗?
示例
#define my_define(param1,param2,param3)\
if (param1) \
{/*do something */} \
if (param2) \
{/*do something */} \
if (param3) \
{/*do something */}
答案 0 :(得分:2)
是的,#define
宏可以有多个参数。
具体来说,C99指定兼容的实现必须能够处理宏的至少127个参数(在C89中它曾经是31)。
答案 1 :(得分:0)
如果您正在尝试确定向函数传递了多少个参数,则可以使用:
#include <stdarg.h>
#define __VA_NARGS__(...) __VA_NARGS__N(__VA_ARGS__,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
#define __VA_NARGS__N(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30,_31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,_64,N,...) N
#define sum(...) _sum (__VA_NARGS__(__VA_ARGS__), __VA_ARGS__)
int _sum (numargs, ...) {
int total = 0;
va_list args;
va_start (args, numargs);
for (; numargs > 0; numargs--) {
total += va_arg (args, int);
}
va_end (args);
return (total);
}