如何知道你所处的宏观环境

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() {\
  ... \
}