2012-09-26 78 views
4

是否可以獲取指向當前函數的指針?如果是這樣,我該怎麼做?我可以得到一個指向當前函數的指針嗎?

動機:我有一個功能做一些記錄,並想打電話

log(currentfunc, "blabla") 

,做一些輸出的例子。

+0

如果您想在大多數編譯器中進行日誌記錄,您可以使用宏獲取該函數的名稱。 _____func_____是宏如果內存提供 – Lefteris

+0

另見這裏。 http://stackoverflow.com/questions/2154852/get-a-pointer-to-the-current-function-in-c-gcc – md5

+1

不要調用你的函數'log' - 有一個常用的函數稱爲'在math.h中記錄'返回自然對數。 –

回答

5

您可以通過預定義標識符__func__(它是C99的一部分)獲取當前函數的名稱(但不是指向它的指針)。

log(__func__, "blabla"); 

Here's the reference

+0

你知道在c89中使用它的方法嗎?沒有必要在C89中做到這一點,但我想知道它。 – musicmatze

+0

@cmusicmatze:不,在c89中,你可以做的最好的事情就是使用'__FILE__'和'__LINE__',或者利用你的實現提供的非標準可能性(如果有的話)。 –

+0

這是否在C++(例如C++ 11)中起作用? – einpoklum

2

我不知道有關指針的函數,但是預定義的標識符__func__返回函數的名稱。也許這可以幫助...

事實上,我與宏替換你的函數log,這樣你就不必在名稱每次粘貼,因爲這樣的:

#define log(x) log(__func__,x) 
+2

'__func__'不是宏。 – md5

+0

@Kirilenko hmmm預定義標識符...好的 –

0

你可以使用組合__ FILE ____ LINE __。它將與MicrosoftGCC編譯器一起工作。

相關問題