c – 在异常容易的代码中使用va_list是否安全?

前端之家收集整理的这篇文章主要介绍了c – 在异常容易的代码中使用va_list是否安全?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
典型例子:
void foo(const char *fmt,...)
{
    va_list args;
    va_start(args,fmt);

    // might throw,might not.  who knows.
    bar(fmt,args);

    // uh-oh...
    va_end(args);
}

这是一个坏主意,即在c中使用va_list是不常见的?如果我把酒吧放在try-catch中,那有帮助吗?什么是一些替代品?

解决方法

C标准符合va_start等的规范的C标准. C标准有这样的说法:

7.15.1p1 … va_start和va_copy宏的每个调用应通过相同功能中的va_end宏的相应调用进行匹配.

因此,如果您在调用va_start之后但在va_end之前以任何方式退出函数,则程序将显示未定义的行为.

是的,包装条在try / catch将有所帮助.

猜你在找的C&C++相关文章