变量名作为宏参数

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