2014-02-19 85 views
2

我正在尋找將函數注入函數並在函數返回之前運行該代碼。但是,我不想將我想要注入的代碼作爲頭文件包含在該函數中。在函數返回之前掛鉤函數C

有沒有辦法,以某種方式編譯文件,以便我們不需要包含額外代碼頭文件,並在同一時間,我們可以注入額外的代碼在specefic功能,它終止之前運行它..

只是看看的想法..

感謝

+1

不,其實我想你會發現它不可能做到這一點,而無需修改themselvesa – jozefg

+0

雖然這個問題我提出這項功能作爲C++的重複,答案基本相同。 C和C++都不會公開支持它,但是可以通過預處理器或鏈接器執行各種操作。 –

+1

充其量不過是微不足道的;實際上非常困難。這是編譯時選項嗎?注入的代碼是否需要訪問函數中的局部變量,還是獨立存在?您最接近的方法可能涉及重命名「真實」函數,使用調用重命名的實函數的「真實」函數的名稱編寫鉤子函數,執行鉤子操作,然後返回值。但是這依賴於不需要訪問局部變量。 –

回答

0

可能回調可以做這項工作,例如:

typedef void (*fpointer)(void); 

void foo(void){ 
    //fooing 
} 

void bar(void){ 
    //baring 
} 

void f(fpointer some_function){ 

    //do the joob 

    //some other job before exiting 
    some_function(); 
} 

,並用它作爲

f(foo); 

f(bar);