请告诉我是否有办法在宏函数中使用可变参数并使下面的宏代码正常工作。
换句话说,有什么方法可以在 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/