c - 将变量的值传递给 C 中的宏

标签 c c-preprocessor

我试图将变量的值传递给 C 中的宏,但我不知道这是否可行。示例:

#include <stdio.h>

#define CONCVAR(_n) x ## _n

int main () {
   int x0, x1, x2, x3, x4, x5, x6, x7, x8, x9;
   int i;

   for (i = 0; i <= 9; i++) CONCVAR(i) = i*5;

   return 0;
}

在这里,我尝试使用宏为所有 x_ 变量赋值,使用 ## 标记。我知道我可以使用数组轻松实现此目的,但这仅用于学习目的。

CONCVAR(i) 被替换为 xi,而不是 x1(如果 i == 1)。我知道定义和宏是如何工作的,它们都是关于替换的,但我想知道是否可以将 i 的值而不是字母 i 传递给宏。

最佳答案

i 的值替换到宏中是不可能的,因为宏替换发生在代码编译之前。如果您使用的是 GCC,您可以通过添加“-E”命令行参数来查看预处理器输出(但是请注意,您会看到代码中插入的所有#include。)

C 是一种静态语言,您无法在运行时决定符号名称。但是,如果您使用数组并使用下标引用元素,那么您想要实现的目标是可能的。根据经验,如果您有很多变量,例如 x0、x1 等,您可能应该使用数组之类的容器。

关于c - 将变量的值传递给 C 中的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58378450/

相关文章:

调用方法C

c++ - 如何绘制到控制台/终端的某个部分?

使用 C 在文本编辑器中创建文本

c++ - 如何保证在粘贴之前参数的完整宏扩展?

c - `errno`的语义

c - 带有连接参数的 X-Macro

c++ - 使用预处理器重新定义 for 循环

c - 未知类型的 C 预处理器宏

c - vfork() 系统调用

C: 如果 x 是 char 类型,在 x=~x 中会发生什么(详细)?