※ 引述《qrtt1.bbs@bbs.sayya.org (foolish)》之銘言:
: function pointer
: 目的是定一個function的"型式",
: 成為一種默契讓要自行實作的人明白要有什麼樣的回傳值,什麼樣的參數
: 像qsort函式,他提供了一個比較用的function
: 但是沒有寫死在上面,而是提供了function pointer的參數可以傳入
: 這是一種演算方式"委外"的機制
: 那天您大爺心情好想要asc order那天又變了心想要變成desc order
: 或是亂數排列,都只要修改自己的function pointer
: 不用動到原本設計好的qsort
: 這樣"委外"的好處是當以上的需求有改變時
: 可以簡單的僅修改某部分的程式,而不用動到原本設計好的方法
: ========================================================
: static void (*single_server_pre_accept) (char *, char **);
: 對任何一個回傳是static void
^^^^^^^^^^^^^^^^^
整段說明得很好,但是關於這句有點問題
return type 就只是 "void",不是 "static void"
若是這個 declaration 放在 global 區域
加 static 代表
single_server_pre_accept 這個變數的可見度,只限於當前這個 source file
別的 source file 內就算用 extern .. 也不能取用
若是這個 declaration 放在 function 內 (local scope)
那加 static 意義只是說
single_server_pre_accept 是個 static 變數
下次 call 進來這個 function 時
single_server_pre_accept 這變數的值仍然保留著
: 且傳入參數為char *, char**
: 的函式都可以指名給這個function pointer
: 呵,別忘了在大部分的c學習教材都有試著讓人函一下function的address
: 所以,別懷疑function真的有一個address可以被pointer pointer
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.129.20.4