如何知道你所处的宏观环境
How to know the Macro context you are in
例如:
#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 )
..."context" 应该命名为什么?
一种函数用一个宏就够了
#define FUNCTION(macroname,prefix) void macroname##prefix() {//func definition }
#define FUNCTION(MY_TEST_FUNCTION,test)
您对宏包含系统的假设过多。 (without-variable) 宏只是用一串字符替换名称。没有 "current macro context",只有宏名称及其替换字符的映射。 header 宏保护没有什么比像 EXIT_FAILURE
(在 stdlib.h
中)这样的宏更特别的了。
#ifdef
和 #ifndef
只是测试是否使用给定名称定义了一个宏,任何宏。
所以如果你想有一个"header macro context",你必须在header的开头手动设置它。
或者您的问题可以通过参数宏来解决。
#define function_variation( suffix ) int function_##suffix() {\
... \
}
例如:
#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 )
..."context" 应该命名为什么?
一种函数用一个宏就够了
#define FUNCTION(macroname,prefix) void macroname##prefix() {//func definition }
#define FUNCTION(MY_TEST_FUNCTION,test)
您对宏包含系统的假设过多。 (without-variable) 宏只是用一串字符替换名称。没有 "current macro context",只有宏名称及其替换字符的映射。 header 宏保护没有什么比像 EXIT_FAILURE
(在 stdlib.h
中)这样的宏更特别的了。
#ifdef
和 #ifndef
只是测试是否使用给定名称定义了一个宏,任何宏。
所以如果你想有一个"header macro context",你必须在header的开头手动设置它。
或者您的问题可以通过参数宏来解决。
#define function_variation( suffix ) int function_##suffix() {\
... \
}