在c++中传递宏时出现无效参数错误
Invalid arguments error when passing macros in c++
有如下函数:
int kvm_vcpu_ioctl(int vcpu_fd,int type, ...)
{
int ret;
void *arg;
va_list ap;
va_start(ap, type);
arg = va_arg(ap, void *);
va_end(ap);
ret = ioctl(vcpu_fd, type, arg);
if (ret == -1)
ret = -errno;
return ret;
}
,当我想调用它,但传递一个宏作为参数,如:
kvm_vcpu_ioctl(vcpus.fds[vcpu_id],KVM_NITRO_GET_SREGS,sregs);
中定义的宏是:
#define KVM_NITRO_GET_SREGS _IOR(KVMIO, 0xE9, struct kvm_sregs)
我得到这个错误:
无效参数候选人:Int kvm_vcpu_ioctl(Int, Int,…)
我不为什么?
_IOR:
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
和_IOC是:
#define _IOC(dir,type,nr,size)
(((dir) << _IOC_DIRSHIFT) |
((type) << _IOC_TYPESHIFT) |
((nr) << _IOC_NRSHIFT) |
((size) << _IOC_SIZESHIFT))
您对KVM_NITRO_GET_SREGS
的定义"调用" _IOR
,第三个参数为struct kvm_sregs
。从_IOR
的定义来看,sizeof(struct kvm_sregs)
可能更合适。或者也许你有参数乱序,因为似乎_IOR
的第一个参数应该是type
,但我不确定KVMIO
扩展到…
查找在其他驱动程序中使用_IOR
的其他位置,并模仿它们。
相关文章:
- 为什么 CRTP 模板C++给出无效参数错误?
- 为什么此字符串在传递到stoi时被视为无效参数
- boost::asio::async_write无效参数
- C ++回测问题:如何检查构造函数在假定失败时是否失败(给定输入的无效参数)
- 无效参数 C++ cygwin
- 套接字接受无效参数 (c++)
- 从带有 getline() 的文件读入一行上有多个信息得到无效参数错误
- 将无效参数传递给将无效参数视为致命的函数
- 如何避免字符串到整数转换情况下的无效参数异常
- 张量流 无效参数:In[0] 不是矩阵
- cudaFreeHost() 无效参数错误
- 未经治疗的例外,无效的参数传递给了一个认为无效参数作用的函数
- C++带有可变参数模板的无效参数
- std::find是否隐式修复无效参数
- 为什么这个程序告诉我传递了无效参数
- 在Win32中获取SetConsolecursorPosition函数的ERRORRORNO 87(无效参数)
- MSVCR120.dll的无效参数错误(在64位窗口中构建Tesseract Lib)
- 在C++中使用字符串类的 .substr 获取无效参数
- MySQL++ 无效参数错误
- 搜索无效参数