c++ - 使用可变参数的宏

标签 c++ c variadic-functions

请告诉我是否有办法在宏函数中使用可变参数并使下面的宏代码正常工作。

换句话说,有什么方法可以在 va_start 中使用局部变量。

typedef struct
{
    char *p1;
    char *p2;
    char *p3;
}Pointers;

#define NULLCHECK_VR(num, ...)                          \
        {                                               \
            va_list valist;                             \
            int     v_index;                            \
                                                        \
            va_start(valist, num);                      \
                                                        \
            for( v_index=0; v_index < num; v_index++)   \
            {                                           \
                if( NULL == va_arg(valist, void *))     \
                {                                       \
                    printf("NULL \n");                  \
                }                                       \
                else                                    \
                {                                       \
                    printf("NOT NULL \n");              \
                }                                       \
            }                                           \
                                                        \
            va_end(valist);                             \
        }

int main(void)
{
    Pointers ptr;

    memset(&ptr, 0, sizeof(Pointers));

    NULLCHECK_VR(3, ptr.p1, ptr.p2, ptr.p3)

    return (0);
}

最佳答案

您可以使用常规函数:

void NULLCHECK_VR(int num, ...)
{
    va_list valist;
    int     v_index;

    va_start(valist, num);

    for( v_index=0; v_index < num; v_index++)
    {
        if( NULL == va_arg(valist, void *))
        {
            printf("NULL\n");
        }
        else
        {
            printf("NOT NULL\n");
        }
    }

    va_end(valist);
}

或在 C++ 中 (17)

template <typename Ts>
void NULLCHECK_VR(const Ts*... ptrs)
{
    ((std::cout << (ptrs == nullptr ? "NULL\n" : "NOT NULL\n")), ...);
}

关于c++ - 使用可变参数的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59731531/

相关文章:

c++ - 从 1 开始数组索引有问题吗?

c++ - 仅当某些值在 C++ 中保持不变时才读取某些列

java - 在 OOP 中,Private 成员对谁来说是私有(private)的?

c - 通过流套接字发送图像

c++ - MySQL 和可变参数

java - Java 中 Class 类型的可变参数

c++ - 将现有 C++ 源代码导入 Visual Studio

c - Malloc 中的 Strlen

c - 从文件中读取内容时出错

scala - 具有部分应用函数的可变参数