【问题标题】:How can I concatenate a string and a variable which is types of int?如何连接字符串和 int 类型的变量?
【发布时间】:2021-05-14 15:24:06
【问题描述】:

我必须编写一个宏,它连接一个带有 GPIO 的数字变量。 例如:

 #define SELECT_PIN(pin) GPIO##pin

int main (void)
{
  uint16_t x=5;
  ioregister.SELECT_PIN(x)= OUTPUT;
}

这个宏自然会输出"this structure has no element like GPIOx"这样的结果。

我需要你们的帮助。

【问题讨论】:

  • 您不能为此使用宏。 x 是在运行时更改的变量,宏在编译时扩展。您要么需要将 x 也设为宏,要么使用运行时函数将整数转换为字符串并连接字符串。
  • 这不是一个完整的Minimal, Complete, and Verifiable example
  • @SergeyA 好的先生,我忘了宏在编译时执行。

标签: c concatenation


【解决方案1】:

如何连接字符串和 int 类型的变量?

你不能。您可以将 int 转换为字符串并连接 - 使用 snprintf

我必须编写一个宏来连接一个带有 GPIO 的数字变量

这是不可能的——宏必须在编译时在预处理器中执行——它不能依赖于变量的值。


你可以写一个函数。

void pin_set(register_type reg, uint16_t idx, bool value) {
     if (idx == 0) {
         reg.GPIO0 = val;
     } else .... etc. ..
}

bool pin_get(register_type reg, uint16_t idx) {
    ... similar to above ...
}

int main() {
  uint16_t x=5;
  pin_set(ioregister, x, OUTPUT);
}

通常GPIOX 是在联合内部定义的一些便利结构成员,并且此类setget 函数使用位掩码对允许将整个寄存器作为一个字访问的另一个结构成员进行操作。

【讨论】:

  • 我以为实现了你写的功能,但是,有 87 个引脚。我正在尝试使用 TI 的 C2000 系列,而 TI 仅提供 .h 头文件,其中包括嵌套联合结构中的寄存器定义。这种嵌套构建使事情变得困难。 ST是最好的..
猜你喜欢
  • 1970-01-01
  • 2014-03-08
  • 2020-09-29
  • 2016-11-15
  • 2018-06-23
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多