2011-05-24 74 views
0

如何通過變量對由C庫提供的接口函數執行傳遞?通過外部庫傳遞變量

例如,我有以下的接口函數:
void f(double *d) { *d = 7.5; }

在我的申請,我通過庫鏈接,並調用該函數:
double p = 0;
f(&p);

不過,我注意到p爲仍爲0而不是7.5。

回答

2

您的應用程序中是否有範圍爲f的原型?

如果沒有編譯器將p的地址轉換爲int;如果它們不是相同的尺寸或者使用相同的傳球規則或者其他,你會遇到問題。

您應該#include "the_proper_header.h"或者您可以直接在您的應用程序中添加原型,就在您調用該函數之前。

double p = 0; 
void f(double *); 
f(&p); 
+0

是的,頭文件已包含在內。如果函數不在程序中,但在另一個庫中,是否有任何特殊處理?沒有鏈接錯誤。 – jasonline 2011-05-24 15:52:45

+0

不,不需要特殊處理。許多函數('printf','malloc','sqrt',...,...)沒有在使用它們的程序中定義。你真的使用普通的老C嗎?你使用「界面」很奇怪(ish) – pmg 2011-05-24 16:06:44

+0

這就是我的想法。是的,普通的C,是什麼讓它變得陌生? – jasonline 2011-05-24 16:22:31

0

您的示例工作,請參閱http://codepad.org/JJL7eab5

我所做的唯一的變化是我定義它之前宣佈f()

void f(double *); 

如果函數定義被聲明爲static它也會工作。在C中,函數需要在其定義之前聲明或聲明爲靜態。

+0

是的,它只適用於普通程序。但是,當我嘗試將f()放入庫中時,我發現它僅通過值傳遞參數,即使我在庫中對其進行了更改。 – jasonline 2011-05-24 15:47:03