【发布时间】:2011-09-22 06:02:12
【问题描述】:
我目前正在编写一个函数,该函数将采用可变数量的参数。我将参数的数量传递给函数,然后遍历参数列表。
每个传递的参数都应该是一个整数。我将把这个整数添加到一个整数向量中,稍后会用到。
我想确保某些小丑将来不会尝试向此函数传递除整数以外的其他东西。我认识到我可以检查 va_arg 中的当前参数以确保它不为 NULL,并且我可以使用类似 isanum(va_arg()) 的东西来确定它是否是一个有效的整数。我想我什至可以检查 sizeof(va_arg) 并将其与 sizeof(int) 进行比较并确保它们相等。
我是否可以运行任何其他检查来验证我是否已通过有效整数?
提前感谢您的帮助
【问题讨论】:
-
gcc 可以对
printf参数进行完整性检查,我很确定有一种方法可以将该行为扩展到自定义函数。显然,它极不便携,但如果你碰巧在使用 gcc,它可能值得研究。 -
我正在使用 GCC -- 抱歉耽搁了。
-
可变参数和类型安全不能混用。为了你的理智,请改为传递一个容器(你可以使用 boost::assign 来为调用者简化事情),或者一个迭代器范围,或者使用某种运算符链接接口(比如 iostreams 的工作方式)。
标签: c++ arguments variadic-functions