如何通過變量對由C庫提供的接口函數執行傳遞?通過外部庫傳遞變量
例如,我有以下的接口函數: void f(double *d) { *d = 7.5; }
在我的申請,我通過庫鏈接,並調用該函數: double p = 0;
f(&p);
不過,我注意到p爲仍爲0而不是7.5。
如何通過變量對由C庫提供的接口函數執行傳遞?通過外部庫傳遞變量
例如,我有以下的接口函數: void f(double *d) { *d = 7.5; }
在我的申請,我通過庫鏈接,並調用該函數: double p = 0;
f(&p);
不過,我注意到p爲仍爲0而不是7.5。
您的應用程序中是否有範圍爲f
的原型?
如果沒有編譯器將p
的地址轉換爲int;如果它們不是相同的尺寸或者使用相同的傳球規則或者其他,你會遇到問題。
您應該#include "the_proper_header.h"
或者您可以直接在您的應用程序中添加原型,就在您調用該函數之前。
double p = 0;
void f(double *);
f(&p);
您的示例工作,請參閱http://codepad.org/JJL7eab5。
我所做的唯一的變化是我定義它之前宣佈f()
:
void f(double *);
如果函數定義被聲明爲static它也會工作。在C中,函數需要在其定義之前聲明或聲明爲靜態。
是的,它只適用於普通程序。但是,當我嘗試將f()放入庫中時,我發現它僅通過值傳遞參數,即使我在庫中對其進行了更改。 – jasonline 2011-05-24 15:47:03
是的,頭文件已包含在內。如果函數不在程序中,但在另一個庫中,是否有任何特殊處理?沒有鏈接錯誤。 – jasonline 2011-05-24 15:52:45
不,不需要特殊處理。許多函數('printf','malloc','sqrt',...,...)沒有在使用它們的程序中定義。你真的使用普通的老C嗎?你使用「界面」很奇怪(ish) – pmg 2011-05-24 16:06:44
這就是我的想法。是的,普通的C,是什麼讓它變得陌生? – jasonline 2011-05-24 16:22:31