“va_start”用于具有固定参数的功能va_start(ap,flags);

‘va_start’ used in function with fixed args va_start(ap, flags);

本文关键字:start va ap 功能 flags 用于 参数      更新时间:2023-10-16

这个看似简单的代码狙击手给了我一个我无法弄清楚的错误:

错误消息是:‘va_start’ used in function with fixed args va_start(ap, flags);

static inline int sgx_wrapper_open64(const char *pathname, int  flags,unsigned int mode) {
   va_list ap; 
   va_start(ap, flags); 
   if (flags & O_CREAT)
      mode = va_arg(ap, mode_t); 
   else
      mode = 0777;
   va_end(ap);  
   int retval;
   ocall_open2(&retval, pathname, flags, mode);
   return retval;
}

这是因为va_start(以及所有其他可变参数辅助程序"函数")只能在参数列表以省略号...结尾的函数中使用。

如果可以,那么您可以像

static inline int sgx_wrapper_open64(const char *pathname, int flags, ...)
{
    va_list ap; 
    va_start(ap, flags); 
    mode_t mode;
    if (flags & O_CREAT)
        mode = va_arg(ap, mode_t); 
    else
        mode = 0777;
    va_end(ap);     
    int retval;
    ocall_open2(&retval, pathname, flags, mode);
    return retval;
}

特别要注意函数参数列表的变化,以及局部变量mode的添加。

错误消息

"'va_start'用于具有固定参数的函数"是不言自明的。您的函数具有固定的参数列表。 va_start只能在具有可变参数列表的函数中使用,这意味着它以省略号结尾,例如:

static inline int sgx_wrapper_open64(const char *pathname, int flags, ...)
相关文章: