1. 程式人生 > >C語言:在main函式之前和之後執行函式

C語言:在main函式之前和之後執行函式

前段時間,需要寫個簡單的用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