【问题标题】:Old code : access arguments of a function passed as an argument to another function?旧代码:访问作为参数传递给另一个函数的函数的参数?
【发布时间】:2011-08-18 22:51:46
【问题描述】:

我必须维护一段在 64k 机器上编译时无法正常工作的旧代码。

我有一个函数“solve”调用另一个函数“funct”作为指针传递:

int solve(double*x,double xA,double xB,double zeps,double funct(double x,double*),...)

因此,“solve”可以与不同的可能功能一起使用,例如:

double isDgood(double D,double*Y);

在函数“solve”中,可以调用函数“funct”并使用以下方法访问其参数:

fA=funct(xA,(double*)(&funct+1));"

虽然我不熟悉这种语法,但我猜开发人员假设未指定的参数只是被压入堆栈。但是,此代码不再适用于 64k 平台。如何更正此代码?我应该专门使用 Va_list 吗?

非常感谢您的帮助。

【问题讨论】:

  • 是的,您需要为此使用 VA 机制。事实上,它正在调用 Undefined Behavior。 (多年来,代码的意图是什么。)但是,这不是使代码现代化的好机会吗?改用函数对象 - 调用者向函数对象的构造函数提供参数,而您的 solve 函数只调用它。您甚至可以使用std/boost::bind() 即时创建这些。
  • 非常感谢您的帮助。我会尝试使用 va_list。再次感谢!

标签: c++ ellipsis


【解决方案1】:

这是可怕的未定义行为。如果你想访问参数,你必须传递它们。

【讨论】:

    猜你喜欢
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多