在另一个#define 中使用#define 的参数名称
Use Parameter Name of #define in another #define
有没有办法将 #define
参数的名称用作另一个 #define
参数?例如:
#define TEST 1
#define FOO(X) foo_##X
#define BAR(X) FOO(##X)
BAR(TEST)
结果是:
foo_TEST
不是:
foo_1
这不起作用,因为它给出了:
pasting "(" and "TEST" does not give a valid preprocessing token
删除 BAR 宏中的双“#”。
查看工作示例:
http://ideone.com/hEhkKn
#include <stdio.h>
#define FOO(X) foo_##X
#define BAR(X) FOO(X)
int main(void) {
int BAR(hello);
return 0;
}
关于您更新的问题:
如果您想使用像 'TEST' 这样的定义名称,请将您的代码更改为
#define TEST TEST
#include <stdio.h>
#define TEST TEST
#define FOO(X) foo_##X
#define BAR(X) FOO(X)
int BAR(TEST) (int v) {
return v;
}
int main(void) {
return foo_TEST(0);
}
只有两种方法可以避免计算宏参数。在其上使用 #
(字符串化)处理运算符或 ##
(标记粘贴)运算符。
尝试以下操作:
#include <stdio.h>
#define TEST 1
#define FOO(X) foo ## X
#define BAR(X) FOO(_ ## X) // Prevent the evaluation of X with ##
void foo_1()
{
printf("%s\n", __FUNCTION__);
}
void foo_TEST()
{
printf("%s\n", __FUNCTION__);
}
int main()
{
BAR(TEST)();
return 0;
}
有没有办法将 #define
参数的名称用作另一个 #define
参数?例如:
#define TEST 1
#define FOO(X) foo_##X
#define BAR(X) FOO(##X)
BAR(TEST)
结果是:
foo_TEST
不是:
foo_1
这不起作用,因为它给出了:
pasting "(" and "TEST" does not give a valid preprocessing token
删除 BAR 宏中的双“#”。
查看工作示例: http://ideone.com/hEhkKn
#include <stdio.h>
#define FOO(X) foo_##X
#define BAR(X) FOO(X)
int main(void) {
int BAR(hello);
return 0;
}
关于您更新的问题:
如果您想使用像 'TEST' 这样的定义名称,请将您的代码更改为
#define TEST TEST
#include <stdio.h>
#define TEST TEST
#define FOO(X) foo_##X
#define BAR(X) FOO(X)
int BAR(TEST) (int v) {
return v;
}
int main(void) {
return foo_TEST(0);
}
只有两种方法可以避免计算宏参数。在其上使用 #
(字符串化)处理运算符或 ##
(标记粘贴)运算符。
尝试以下操作:
#include <stdio.h>
#define TEST 1
#define FOO(X) foo ## X
#define BAR(X) FOO(_ ## X) // Prevent the evaluation of X with ##
void foo_1()
{
printf("%s\n", __FUNCTION__);
}
void foo_TEST()
{
printf("%s\n", __FUNCTION__);
}
int main()
{
BAR(TEST)();
return 0;
}