变量名作为宏参数
variable name as macro argument
我正在尝试在 c 中创建一个宏,它将采用一个变量名并声明它。我可以这样称呼它:
MY_MACRO(test);
会产生:
int test;
为了实现这一点,我采用了这种方式:
#define MY_MACRO(var) /
int ##var; /
但是编译器不理解这一点。 C11 中是否存在这样的语法?
我不建议做这样的事情。无论如何,有两个问题。首先,要跳过换行符,您需要 \
,而不是 /
。
其次,##
是错误的。它所做的是将 var
连接到 int
。所以使用 MY_MACRO(foo)
你会得到 intfoo;
,但你想要 int foo;
宏需要这样:
#define MY_MACRO(var) \
int var
##
在这里不适用,因为它将令牌与其他内容连接起来
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MY_MACRO(var) int var
或
#define MY_MACRO(var) \
int var \
void foo(void)
{
MY_MACRO(a);
a = rand();
printf("%d\n",a);
}
##
将两个标记粘贴到一个标记中。
#define poem(var)\
int jack##var;
// Produces 'int jacksprat;'
poem(sprat)
在你的情况下,你根本不需要做任何特殊的事情,你可以直接使用参数:
#define MY_MACRO(var)\
int var;
correct syntax 大概是这样的:
#define MY_MACRO(ident) \
int ident
int main() {
MY_MACRO(test);
test =42;
return test;
}
但是,您是否一直在研究 typedefs?与 typedef 不同,宏被认为是不好的做法。
我正在尝试在 c 中创建一个宏,它将采用一个变量名并声明它。我可以这样称呼它:
MY_MACRO(test);
会产生:
int test;
为了实现这一点,我采用了这种方式:
#define MY_MACRO(var) /
int ##var; /
但是编译器不理解这一点。 C11 中是否存在这样的语法?
我不建议做这样的事情。无论如何,有两个问题。首先,要跳过换行符,您需要 \
,而不是 /
。
其次,##
是错误的。它所做的是将 var
连接到 int
。所以使用 MY_MACRO(foo)
你会得到 intfoo;
,但你想要 int foo;
宏需要这样:
#define MY_MACRO(var) \
int var
##
在这里不适用,因为它将令牌与其他内容连接起来
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MY_MACRO(var) int var
或
#define MY_MACRO(var) \
int var \
void foo(void)
{
MY_MACRO(a);
a = rand();
printf("%d\n",a);
}
##
将两个标记粘贴到一个标记中。
#define poem(var)\
int jack##var;
// Produces 'int jacksprat;'
poem(sprat)
在你的情况下,你根本不需要做任何特殊的事情,你可以直接使用参数:
#define MY_MACRO(var)\
int var;
correct syntax 大概是这样的:
#define MY_MACRO(ident) \
int ident
int main() {
MY_MACRO(test);
test =42;
return test;
}
但是,您是否一直在研究 typedefs?与 typedef 不同,宏被认为是不好的做法。