我正在尝试在c中创建一个宏,该宏将采用变量名并进行声明。我可以这样称呼它:
MY_MACRO(test);
会产生:
int test;
为了实现这一目标,我采用了这种方式:
#define MY_MACRO(var) /
int ##var; /
但是编译器不理解这一点。 C11中是否存在这种语法?
答案 0 :(得分:4)
我不建议您这样做。无论如何,有两个问题。首先,要跳过换行符,您需要<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="code" action="*" method="post" autocomplete="off">
<input type="text" name="code" maxlength="1" autocomplete="off" class="a">
<input type="text" name="code" maxlength="1" autocomplete="off" class="b">
<input type="text" name="code" maxlength="1" autocomplete="off" class="c">
<span>—</span>
<input type="text" name="code" maxlength="1" autocomplete="off" class="d">
<input type="text" name="code" maxlength="1" autocomplete="off" class="e">
<input type="text" name="code" maxlength="1" autocomplete="off" class="f last">
</form>
,而不是\
。
第二,/
是错误的。它的作用是将##
连接到var
。因此,使用int
您将获得MY_MACRO(foo)
,但您想要intfoo;
宏必须是这样的:
int foo;
答案 1 :(得分:2)
.trim()
在此处不适用,因为它会将令牌与其他内容连接起来
##
或
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MY_MACRO(var) int var
#define MY_MACRO(var) \
int var \
答案 2 :(得分:1)
##
将两个令牌一起粘贴到一个令牌中。
#define poem(var)\
int jack##var;
// Produces 'int jacksprat;'
poem(sprat)
就您而言,您根本不需要做任何特殊的事情,您可以直接使用参数:
#define MY_MACRO(var)\
int var;
答案 3 :(得分:0)
correct syntax可能与此类似:
#define MY_MACRO(ident) \
int ident
int main() {
MY_MACRO(test);
test =42;
return test;
}
但是,您是否一直在研究typedefs?与typedef不同,宏被认为是不好的做法。