小编use*_*693的帖子

将va_start宏与此参数一起使用是否安全?

我必须在嵌入式应用程序中使用IAR编译器(它没有名称空间,异常,多重/虚拟继承,模板受位限制并且仅支持C ++ 03)。我无法使用参数包,因此尝试使用可变参数创建成员函数。我知道可变参数通常是不安全的。但是thisva_start宏中使用指针是否安全?

如果我使用普通的可变参数函数,则需要一个伪参数才能...访问其余参数。我知道可变参数宏之前不需要参数,...但我不希望使用它。如果我使用成员函数,则它this之前具有隐藏参数,...因此我尝试了它:

struct VariadicTestBase{
  virtual void DO(...)=0;
};

struct VariadicTest: public VariadicTestBase{
  virtual void DO(...){
    va_list args;
    va_start(args, this);
    vprintf("%d%d%d\n",args);
    va_end(args);
  }
};

//Now I can do
VariadicTestBase *tst = new VariadicTest;
tst->DO(1,2,3);
Run Code Online (Sandbox Code Playgroud)

tst->DO(1,2,3);按预期打印123。但是我不确定这是否只是一些随机/未定义的行为。我知道tst->DO(1,2);会像普通的prinf一样崩溃。我不介意。

c++ variadic language-lawyer c++03

18
推荐指数
1
解决办法
787
查看次数

标签 统计

c++ ×1

c++03 ×1

language-lawyer ×1

variadic ×1