[英]Call flow for the code - C
我正在研究微控制器的一些C代碼。 我理解大多數代碼,但是這段代碼讓我感到困惑。 我還包括有關二手數據類型的定義。 為了方便起見,我已經替換了函數名和變量名。
#define COUNT (2)
typedef void(*some_type)(void *p);
some_type some_arr[COUNT] = {NULL, };
void init(void)
{
first_function(&second_function);
}
void first_function(some_type cb)
{
if(some_arr_count < COUNT)
{
some_arr[some_arr_count++] = cb;
}
}
void second_function(void *p)
{
another_type *req;
req = (another_type *)p;
//some other code goes here
}
1. typedef是什么意思?
typedef void(*some_type)(void *p);
init()函數僅被調用一次,並且只有一行代碼。
2.這條線是做什么的?
first_function(&second_function);
我在整個項目代碼中搜索了“ second_function”一詞,這是除了函數定義之外唯一出現的地方。
3.那么second_function如何調用?
首先,如注釋中所建議,您應該閱讀有關函數指針的信息。 我從Google搜索中得到了這個( C中的函數指針如何工作? )。
上面的鏈接應該有助於解釋問題1和2的答案。對於問題3,微控制器可能具有一些內置機制或庫函數,這些函數或庫函數調用some_arr[COUNT]
所有函數some_arr[COUNT]
像下面這樣可能會起作用(未試用):
for (int i = 0; i < COUNT; ++i)
{
if (some_arr[i] == NULL) break;
(*some_arr[i])(&something_useful);
}
其中something_useful
是回調函數可以使用的某種數據。
如果您能夠在庫代碼中搜索some_arr
用法, some_arr
可能會找到調用second_function
代碼(盡管不再將其稱為second_function
)。
下面的typedef
typedef void(*some_type)(void *p);
會將some_type
定義為指向void ()(void *)
類型的函數的指針。
以下聲明
first_function(&second_function);
是一個函數調用, &second_function
,這是的地址second_function
中,在參數first_function()
函數second_function
可以這樣調用
some_arr[some_arr_count](p);
some_arr[some_arr_count]
是一個函數指針second_function
,其在分配first_function
,和p
是的參數second_function
,這是一個指向void
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.