#define可以有多个参数吗?

时间:2011-08-24 17:16:32

标签: c

你想创建一个有两个甚至三个参数的定义这可能吗?

示例

#define my_define(param1,param2,param3)\
if (param1) \
{/*do something */} \
if (param2) \
{/*do something */} \
if (param3) \
{/*do something */} 

2 个答案:

答案 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);
}