2015-11-10 46 views
-1

我想了解如何與我的40MHZ SPI收發器的DLL內部的函數接口。特別是我不確定我是否明白該功能是如何定義的以及它正在採取什麼輸入。我是C的初學者,所以你的專業知識對我真的很有幫助。需要C函數及其返回類型的說明

下面是我想了解的C驅動程序代碼。我假設該函數需要緩衝區指針,並且在我調用'c_ch_find_devices_ext'函數後用數據填充緩衝區,但我對返回類型感到困惑,因爲在API文檔中,返回類型是int,但是在這裏它似乎是返回功能本身?

static int (*c_ch_find_devices_ext) (int, u16 *, int, u32 *) = 0; 
int ch_find_devices_ext (
int num_devices, 
u16 * devices, 
int num_ids, 
u32 * unique_ids 
) 
{ 
    if (c_ch_find_devices_ext == 0) { 
     int res = 0; 
     if (!(c_ch_find_devices_ext = _loadFunction("c_ch_find_devices_ext", &res))) 
      return res; 
    } 
    return c_ch_find_devices_ext(num_devices, devices, num_ids, unique_ids); 
} 

以下是關於'c_ch_find_devices_ext'的API文檔,是否準確?

 
Find Devices (ch_find_devices_ext) 
    int ch_find_devices_ext (int num_devices, 
          u16 * devices, 
          int num_ids, 
          u32 * unique_ids); 

Get a list of ports and unique IDs to which Cheetah devices are attached. 

Arguments 
    num_devices: maximum number of devices to return 
    devices: array into which the port numbers are returned 
    num_ids: maximum number of device IDs to return 
    unique_ids: array into which the unique IDs are returned 

Return Value 
    This function returns the number of devices found, regardless of the array size. 
+0

它沒有返回該函數。這看起來像'return c_ch_find_devices_ext'。 Google「函數調用」。 –

+0

通過指針調用C函數看起來與通常的「name」調用相同。即''c_ch_find_devices_ext(num_devices,devices,num_ids,unique_ids)'只是'(* c_ch_find_devices_ext)(num_devices,devices,num_ids,unique_ids)的快捷方式' – Matt

+2

我投票結束這個問題作爲題外話,因爲它是平凡的答覆通過閱讀初學者的語言教程。 –

回答

1

返回類型是int。你可能會覺得困惑的是,C函數不是方法本身,而是一個指向函數的指針,它在稍後獲得。

static int (*c_ch_find_devices_ext) (int, u16 *, int, u32 *) = 0; 

c_ch_find_devices_ext定義爲一個指針,它返回int並具有指定的參數的函數。

如果指針未初始化(即= NULL),則指針從某個共享庫(我的假設)加載,或者其他一些方法,這就是_loadFunction所做的。

if (c_ch_find_devices_ext == 0) { 
    int res = 0; 
    if (!(c_ch_find_devices_ext = _loadFunction("c_ch_find_devices_ext", &res))) 
     return res; 
} 

使用指向函數的指針,就像函數本身返回一個int(如記錄)一樣。

return c_ch_find_devices_ext(num_devices, devices, num_ids, unique_ids); 
+0

我非常喜歡你的解釋,非常感謝你的先生! – joeycao1980

0

它的一個簡單int返回類型是的,文檔是該功能是正確的。它返回找到的設備數量。

你可能會困惑的是該函數實際上是一個指向函數的指針。