验证变量参数是预期类型

BSc*_*ker 6 c++ arguments variadic-functions

我正在编写一个函数,它将采用可变数量的参数.我将参数的数量传递给函数,然后遍历参数列表.

每个传递的参数都应该是一个整数.我将把这个整数添加到一个整数向量中,稍后将使用它.

我想确保一些小丑不会尝试将此函数传递给将来的整数.我认识到我可以检查来自va_arg的当前参数以确保它不是NULL并且我可以使用类似isanum(va_arg())来确定它是否是有效整数.我想我甚至可以检查sizeof(va_arg)并将其与sizeof(int)进行比较并确保它们相等.

是否有任何其他检查我可以运行以验证我已经传递了一个有效的整数?

在此先感谢您的帮助

Oli*_*rth 8

没有明智的方法可以做到这一点.变量参数函数通过将参数的所有原始二进制表示连接到堆栈上的一大块数据来工作.因此它依赖于调用者和被调用者同意参数的数量和类型(否则你将最终阅读,例如int它就像是a float).

至于你的具体想法:

  • va_arg()是一个宏,它简单地将原始堆栈数据的一些字节数解释为您指定的任何类型.因此,调用sizeof()它只会告诉您所要求的数据类型的大小.

  • 通常,没有形成无效整数的原始二进制数据模式.所以假设isanum()不起作用.