检查va_list是否为数组类型

时间:2014-01-08 06:28:01

标签: c++ c

我们有一段代码将一个va_list复制到另一个代码,代码实现如下:

va_list src;
va_list dest;

if(src)
    va_copy(dest, src);

问题是,如果发出所有警告,我会收到以下信息:

  

警告:'src'的地址将始终评估为'true'

我知道这是因为va_list本质上是一个数组,因此src是一个始终评估为true的地址。

既然va_list也可以作为非数组实现,我不想删除这个if检查,因为之后的某个地方它被解除引用并且可能导致崩溃。此实现是否依赖于编译器,平台或其他东西?我可以强迫它到阵列吗?

3 个答案:

答案 0 :(得分:1)

如果使用va_copy()src正确初始化va_list,您只能使用srcva_start作为来源va_copyva_list的实施方式无关紧要,将va_list作为NULL进行测试毫无意义。

答案 1 :(得分:1)

删除条件。当if (src)具有类型src时,va_list始终无效(无意义)。跟踪特定va_list是否已经初始化或销毁(通过va_startva_end)取决于您的程序逻辑,并且无法通过检查va_list来确定以任何方式反对。因此,如果有可能它可能尚未初始化,那么您还有其他错误需要修复......

答案 2 :(得分:0)

每{{}}} - va_copy只能在已初始化的src va_list上使用。之后dest将有效。 dest永远不应被“取消引用” - 如果你这样做,你的用法就会被破坏:你只能使用va_copyva_argva_end