2016-03-16 25 views
3

例如:怎麼知道的宏觀背景下,你是在

#define MY_TEST_FUNCTION 
#ifdef MY_TEST_FUNCTION 
void __MACRO_NAME##_TEST (void *) 
{ 

} 
#endif 

這將產生:

#ifdef MY_TEST_FUNCTION 
void MY_TEST_FUNCTION_TEST (void *) 
{ 

} 
#endif 

這有點像FUNC,我們得到一個函數內部函數名。這可能嗎?

+2

對我來說不清楚。你想要一個預處理器嗎? '__func__'不行嗎? – LPs

+0

我想從ifdef獲取宏名稱。 –

+1

哪個宏名稱? 「_TEST」包含的那個?只需鍵入'_TEST' ... –

回答

2

在語言標準中沒有定義這樣的佔位符。

知道你剛剛檢查過的宏,所以我不明白這樣的佔位符是如何有用的,即使它存在。

也可以考慮......

#if defined(FOO) || defined(BAR) 

...又該 「上下文」 被命名爲?

+0

謝謝,明白了。我試圖找到一種方法不要再次輸入MACRO名稱,而是使用inbuild。就像__func__。 –

0

A單宏一類的功能就足夠了

#define FUNCTION(macroname,prefix) void macroname##prefix() {//func definition } 
#define FUNCTION(MY_TEST_FUNCTION,test) 
1

你承擔了太多宏觀包裹體系統。一個(無變量)宏只需用一串字符替換一個名稱即可。沒有「當前宏上下文」,只是一個宏名稱與替換字符的映射。沒有什麼比宏像EXIT_FAILUREstdlib.h)中的任何宏更具體的標題宏保護。

#ifdef#ifndef只是測試一個宏,任何宏,是否用給定的名稱定義。

所以,如果你想有一個「頭宏上下文」,你必須手動設置它在頭的開頭。

或者也許你的問題可以通過參數宏來解決。

#define function_variation(suffix) int function_##suffix() {\ 
    ... \ 
} 
相關問題