在C中检查多个函数参数是否为NULL的有效方法

问题描述

我只是想知道是否有更有效的方法来检查传递给函数的任何参数是否包含NULL指针? 到目前为止,这就是我一直在使用的参数检查方法。如果任何输入为NULL,我希望函数返回-1。

int Func(const char *one,const char *two){

    if( !one || !two ){
        return -1;
    }

    //rest of the function code
}

这对于接受两个参数的函数很好;但是,如果我有一个接收三个或更多参数函数,则看起来很混乱。有更好的方法吗?

解决方法

您可以为此编写宏。例如5个参数:

#define EVAL(a,...)!(a) || EVAL1(__VA_ARGS__)
#define EVAL1(a,...)!(a) || EVAL2(__VA_ARGS__)
#define EVAL2(a,...)!(a) || EVAL3(__VA_ARGS__)
#define EVAL3(a,...)!(a) || EVAL4(__VA_ARGS__)
#define EVAL4(a,...)!(a) 

#define MYASSERT5(...) EVAL(__VA_ARGS__)

int myfunc(const char *p1,const char *p2,const char *p3,const char *p4,const char *p5)
{
    if(MYASSERT5(p1,p2,p3,p4,p5)) return -1;
}