这个看似简单的代码snipets给了我一个错误,我无法弄清楚:
错误消息为:‘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;
}
答案 0 :(得分:1)
那是因为va_start
(以及所有其他variadic helper "functions")只能用于参数列表以省略号...
结尾的函数中。
如果可以的话,你可以修改像
这样的功能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
的添加。
答案 1 :(得分:1)
错误消息"'va_start'用于具有固定args的功能"是不言自明的。您的函数有一个固定的参数列表。 va_start
只能在具有可变参数列表的函数中使用,这意味着它以省略号结尾,例如:
static inline int sgx_wrapper_open64(const char *pathname, int flags, ...)