C語言:在main函式之前和之後執行函式
阿新 • • 發佈:2019-01-29
前段時間,需要寫個簡單的用C語言實現的輕量級httpd服務,想實現在新增api的時候,只要在Makefile中新增對應的api C檔案,就能做到將此api加入到api列表以提供響應的功能,類似於linux的驅動程式編寫,在編寫驅動的時候,只要編譯我們寫的C程式,即可把驅動加入到核心中。主要是要實現簡單的類似於module_init和module_exit巨集,在api C檔案的最後加入這兩個巨集,實現自動加入和解除安裝指定的api。
C++中,可以通過全域性變數的建構函式實現類似功能,那C語言有嗎?答案是有的,可以利用__attribute__關鍵字來達到目的,前提是你使用的是GCC。
我的實現是:
#define my_init(initfn) \
void initfn() __attribute__((constructor));
#define my_exit(exitfn) \
void exitfn() __attribute__((destructor));
例子:
#include <stdio.h> int main() { printf("Hello World!\n"); return 0; } void before() { printf("before function\n"); } void after() { printf("after function\n"); } #define my_init(initfn) \ void initfn() __attribute__((constructor)); #define my_exit(exitfn) \ void exitfn() __attribute__((destructor)); my_init(before) my_exit(after)
執行的結果為:
before function
Hello World!
after function