簡體   English   中英

代碼的調用流程-C

[英]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 )。

  1. 下面的typedef

     typedef void(*some_type)(void *p); 

    會將some_type定義為指向void ()(void *)類型的函數的指針。

  2. 以下聲明

     first_function(&second_function); 

    是一個函數調用, &second_function ,這是的地址second_function中,在參數first_function()

  3. 函數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM