#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,我們得到一個函數內部函數名。這可能嗎?
#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,我們得到一個函數內部函數名。這可能嗎?
在語言標準中沒有定義這樣的佔位符。
你知道你剛剛檢查過的宏,所以我不明白這樣的佔位符是如何有用的,即使它存在。
也可以考慮......
#if defined(FOO) || defined(BAR)
...又該 「上下文」 被命名爲?
謝謝,明白了。我試圖找到一種方法不要再次輸入MACRO名稱,而是使用inbuild。就像__func__。 –
A單宏一類的功能就足夠了
#define FUNCTION(macroname,prefix) void macroname##prefix() {//func definition }
#define FUNCTION(MY_TEST_FUNCTION,test)
你承擔了太多宏觀包裹體系統。一個(無變量)宏只需用一串字符替換一個名稱即可。沒有「當前宏上下文」,只是一個宏名稱與替換字符的映射。沒有什麼比宏像EXIT_FAILURE
(stdlib.h
)中的任何宏更具體的標題宏保護。
#ifdef
和#ifndef
只是測試一個宏,任何宏,是否用給定的名稱定義。
所以,如果你想有一個「頭宏上下文」,你必須手動設置它在頭的開頭。
或者也許你的問題可以通過參數宏來解決。
#define function_variation(suffix) int function_##suffix() {\
... \
}
對我來說不清楚。你想要一個預處理器嗎? '__func__'不行嗎? – LPs
我想從ifdef獲取宏名稱。 –
哪個宏名稱? 「_TEST」包含的那個?只需鍵入'_TEST' ... –