变量名称作为宏参数

时间:2019-01-17 15:03:49

标签: c c11

我正在尝试在c中创建一个宏,该宏将采用变量名并进行声明。我可以这样称呼它:

MY_MACRO(test);

会产生:

int test;

为了实现这一目标,我采用了这种方式:

#define MY_MACRO(var)   /
    int ##var;          /

但是编译器不理解这一点。 C11中是否存在这种语法?

4 个答案:

答案 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不同,宏被认为是不好的做法。