简体   繁体   中英

Can #define have multi parameters?

Hi wanted to create a define that has two or even three params is this possible ??

Example

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

Yes, #define macro's can have more than one parameter.

Specifically, C99 specifies that a compliant implementation has to be able to deal with at least 127 parameters for a macro (it used to be 31 in C89).

If you're trying to determine how many arguments were passed to a function, you can use this:

#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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM