SDCC 函數指標 (1)

Posted by: 邱小新 at 下午3:26 in
  1. 函數指標宣告

    int (*pt2Function1)(int) = NULL; int (*pt2Function2)(int, char) __reentrant = NULL;

    當函數指標裏的參數超過一個時,就必須宣告成可再入函數型態(__reentrant),否則會出現 Functions called via pointers must be 'reentrant' to take this many arguments 的錯誤。

  2. 函數指標 typedef

    typedef int (*pt2func)(int, char) __reentrant; pt2func pt2Function1 = NULL; int (*pt2Function2)(int, char) __reentrant = NULL;

    pt2Function1 跟 pt2Function2 二者宣告的結果是一樣,而 pt2Function1 看起來更容易理解,也更像一般的變數。

  3. 函數指標設定給值

    int DoIt (int a) { printf("DoIt\n"); return a; } int DoMore(int a, char b) __reentrant { printf("DoMore\n"); return a-b; } pt2Function1 = DoIt; // 簡單表示法 pt2Function2 = &DoMore; // 正規表示法

    當指標函數宣告成 __reentrant 型態,其相對應的函數也要宣告成 __reentrant,否則會造成二者參數傳遞出問題,這個 bug 編輯器可是不會顯示警告的。

  4. 函數指標比較

    if(pt2Function1 > 0) { // check if initialized if(pt2Function1 == &DoIt) printf("Pointer points to DoIt\n"); } else printf("Pointer not initialized!!\n");

  5. 函數指標執行

    int result1 = pt2Function1 (12); // 簡單表示法 int result2 = (*pt2Function2)(12, 'a'); // 正規表示法

0 意見

張貼留言