gpt4 book ai didi

c++ - 如何判断va_list是否为空

转载 作者:可可西里 更新时间:2023-11-01 18:36:08 76 4
gpt4 key购买 nike

我一直在阅读一些编译器支持带有宏的 va_list 并且用户能够 overload the functionality with other macros in order to count the va_list .

使用 visual studio,有没有办法确定 va_list 是否为空(又名 count==0)?基本上我想知道这种情况:

extern void Foo(const char* psz, ...);
void Test()
{
Foo("My String"); // No params were passed
}

我最初的想法是做这样的事情:

va_list vaStart;
va_list vaEnd;
va_start(vaStart, psz);
va_end(vaEnd);
if (vaStart == vaEnd) ...

问题是 va_end 只将参数设置为空。

#define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
#define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _crt_va_end(ap) ( ap = (va_list)0 )

我在考虑是否合并一个 terminator但我希望它对调用者隐藏,以便不需要更改现有代码。

最佳答案

没有办法知道有多少参数通过 ... 传递,也不知道它们是什么类型。只有在您有其他方式(例如 printf 样式的格式字符串)告诉函数期望什么时,才能使用可变函数参数;即便如此,也无法验证论点。

C++11 提供类型安全的可变参数模板。我不知道您的编译器是否支持这些,或者它们是否适合您的问题。

关于c++ - 如何判断va_list是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653124/

76 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com