va_arg()的问题

时间:2010-06-23 07:11:19

标签: c++ variadic-functions

我希望以这种方式创建一个带有变量参数的函数:

static void configElement(U32 localFaultId,
                          char* name,
                          U32  report,
                          U32  localId,
                          U32  detectTime,
                          U32  ceaseTime,...)
{
  U32 i = 0;
  U32 tmpNo = 0;
  va_list ap;

  if (nofFaults >= MAX_NOF_LOCAL_FAULTS)
  {
    //something here
    return;
  }
  else
  {

    faultList[nofFaults].ceaseTime  = ceaseTime;

    va_start(ap, ceaseTime);
    tmpNo = va_arg(ap, U32);
    while ((tmpNo!= END_MARK) && (i < MAX_NOF_DEPEND))
    {
      faultList[nofFaults].dependList[i++].faultNo = tmpNo;
    }


    faultList[nofFaults].dependList[i].faultNo = END_MARK;
    /* Finish by increment nofFaults parameter */
    va_end(ap);
    nofFaults++;
  }
}

但是,编译此代码时出现错误信息:

fault_manager.cc:3344: error: expected primary-expression before ',' token
fault_manager.cc:3387: error: expected primary-expression before 'U32'
fault_manager.cc:3387: error: expected `)' before 'U32'
fault_manager.cc:3387: error: expected `)' before ';' token
fault_manager.cc:3387: error: expected `)' before ';' token

我不知道这里出了什么问题。我的平台是Windows,我正在使用cygwin + Eclipse(CDT)。 gcc的版本是4.1.1。

任何想法都会受到赞赏!

1 个答案:

答案 0 :(得分:4)

看起来编译器不知道U32是什么。你是否包含了所有必要的标题?