近日在看apache的原始碼,在他的module的定義中,ap_hook_handler是乙個非常重要的函式。用來在apache中註冊你的自定義module中的callback函式。
遍搜ap_hook_handler,尋不得在哪定義的。最後發現,這傢伙把所有的hook函式都定義在巨集裡。比**混淆都nb。作為乙個長期從事.net開發的人而言,可稱得上**了。a:
ap_declare_hook(int,handler,(request_rec *r))b:
#define ap_declare_hook(ret,name,args) apr_declare_external_hook(ap,ap,ret,name,args)c:
#define apr_declare_external_hook(ns,link,ret,name,args) \d:
typedef ret ns##_hook_##name##_t args; \
link##_declare(void) ns##_hook_##name(ns##_hook_##name##_t *pf, \
const char * const *aszpre, \
const char * const *aszsucc, int norder); \
link##_declare(ret) ns##_run_##name args; \
apr_implement_hook_get_proto(ns,link,name); \
typedef struct ns##_link_##name##_t \
ns##_link_##name##_t;e:
#define ap_declare(type) typef:
#define apr_implement_hook_get_proto(ns,link,name) \
link##_declare(apr_array_header_t *) ns##_hook_get_##name(void)
把a套入b,得到:
ns = ap
name = handler
arg = (request_rec *r)
把b套入c,又得到:
link = ap
把c套入d,再加上e中的宣告, 最終得到:
typedef int ap_hook_handler_t (request_rec *r);
void ap_hook_handler(ap_hook_handler_t *pf, char * const *aszpre, char * const *aszsucc, int norder);
int ap_run_handler (request_rec *r);
apr_implement_hook_get_proto(ap,ap,handler);
typedef struct ap_link_handler_t
ap_link_handler_t;
其實到這裡,我已經看到了ap_hook_handler的宣告。因此才得以合法的呼叫ap_hook_handler。一切**於**a,a中的一行,最終會被替代成一堆struct定義和函式宣告。讓我們繼續挖一下,把他完全展開,將f也套入apr_implement_hook_get_proto(ap,ap,handler);,得到:
typedef int ap_hook_handler_t (request_rec *r);
void ap_hook_handler(ap_hook_handler_t *pf, char * const *aszpre, char * const *aszsucc, int norder);
int ap_run_handler (request_rec *r);
apr_array_header_t * ap_hook_get_handler(void);
typedef struct ap_link_handler_t
ap_link_handler_t;
感謝netbeans,在linux下,著實除了他,別的工具真的很難挖出這個大蘿蔔。
Spss中定比 定距 定序 定類的區別
spss中定比 定距 定序 定類的區別 1 定比 主要是數值或數字型別,可以做加減運算,目的是得到更加精確的值,比如身高或者體重之類的 2 定距 主要是數值或數字型別,有單位,可以做加減運算,但是不能做乘除運算,比如溫度之類的 3 定類 主要為型別分類,但是分類是沒有大小區分的,比如表示性別,用1表...
淡定,淡定,淡定
我的思緒過分調皮,有時候有個靈感覺得挺好還沒來得及記下來就又去想別的事情了,真不知道自己是怎麼回事。有時候糾結一件事情,是因為不知道如何選擇下面的行動,通常我看到乙個問題後都會冒出a b c三種選擇,如果其中乙個優勢特別顯著還好要是勢力相當就玩完了,我就會很矛盾很糾結,通常是先往東在往西或許還要來回...
SharePoint search 功能的定製開發
概要 客戶要求改善 sharepoint 2007的搜尋功能,我們要自定義開發搜尋功能,一翻調查和研究,sharepoint 的搜尋用到keywordsearchquery和fulltextsearchquery 兩種方式,因為我們要用到自定義的sharepoint list欄位做為過慮條件,所以採...