【发布时间】: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。再次感谢!