c - 如何在 C 中使用 ## 实现循环

标签 c c-preprocessor string-concatenation

我必须实现一个使用##的循环。

#define  REGISTER_EXPANSION_SIMPLE(erm_register,register_index)  erm_register##register_index.R

for(i=0;i<10;i++)
REGISTER_EXPANSION_SIMPLE(ERM.SR,i);

问题在于,由于REGISTER_EXPANSION_SIMPLE将在预置阶段被替换,此时“i”的值将不知道并且扩展将变为

ERM.SRi.R,但我想要它ERM.SR1.R

请您帮我解决这个问题。我知道这是一个逻辑错误。任何帮助将不胜感激。

最佳答案

你不能这样做,i 是一个运行时变量,而不是编译时常量。

假设寄存器位于相邻的存储单元中,您可以做的是:

#define REGISTER_BASE  ((volatile uint8_t*)0x12345678) // uint8_t or uint32_t depending on reg size
#define REGISTER(n)    (*(REGISTER_BASE + n))

...

for(i=0; i<10; i++)
  REGISTER(i) = something;

关于c - 如何在 C 中使用 ## 实现循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34218261/

相关文章:

c++ - C/C++ 宏字符串连接

c - 重复完全相同的代码段 1000 次而不循环

java - 连接字 rune 字 ('x' )与单个字符字符串文字 ("x")

c - 如何将所有命令行参数连接在一起并打印出结果值?

c - C语言编程时在ROM的特定地址写入特定值

c - json_tokener_parse失败时该怎么办

C宏根据类型使用参数

c - Windows 中的用户空间 APC 队列长度

C-错误 : incomplete definition of type 'struct name_s'

python - 有头或尾的 join() 成语吗?