2011-05-04 18 views
0

我必須維護一段舊的代碼,它在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嗎?

非常感謝您的幫助。

+1

是的,你需要使用VA機制。事實上,它正在調用_Undefined Behavior_。 (多年來代碼的意圖是什麼。)然而,這不是一個讓代碼現代化的好機會嗎?改用函數對象 - 調用者將參數提供給函數對象的構造函數,而你的'solve'函數只調用它。你甚至可以使用'std/boost :: bind()'來快速創建這些。 – sbi 2011-05-04 23:20:55

+0

非常感謝您的幫助。我會嘗試再次使用va_list.Thanks! – takis 2011-05-05 16:16:22

回答

2

這是可怕的未定義的行爲。如果你想訪問論點,你將不得不通過它們。

+0

謝謝你的幫助。然後我嘗試了以下內容: – takis 2011-05-05 15:45:46

相關問題