我必須維護一段舊的代碼,它在64k機器上編譯時不再正常工作。舊代碼:訪問作爲參數傳遞給另一個函數的函數參數?
我有一個函數「解決」調用作爲指針傳遞另一個函數「本功能」:
:int solve(double*x,double xA,double xB,double zeps,double funct(double x,double*),...)
因此,「解決」可以具有不同的可能的功能,例如用於
double isDgood(double D,double*Y);
從函數內「解決」,這是可以調用函數「本功能」,用進入它的參數:
fA=funct(xA,(double*)(&funct+1));"
雖然我不熟悉這個語法,但我猜測開發人員假設未指定的參數只是推入棧中。但是,這些代碼在64k平臺上不再適用。我怎樣才能糾正這個代碼?我應該專門使用Va_list嗎?
非常感謝您的幫助。
是的,你需要使用VA機制。事實上,它正在調用_Undefined Behavior_。 (多年來代碼的意圖是什麼。)然而,這不是一個讓代碼現代化的好機會嗎?改用函數對象 - 調用者將參數提供給函數對象的構造函數,而你的'solve'函數只調用它。你甚至可以使用'std/boost :: bind()'來快速創建這些。 – sbi 2011-05-04 23:20:55
非常感謝您的幫助。我會嘗試再次使用va_list.Thanks! – takis 2011-05-05 16:16:22