c - 预处理器不使用定义的散列值,而是使用宏的定义字符串

标签 c hash macros c-preprocessor

我正在尝试一种简单的方法来定义我的 IO。我试图用宏来做到这一点,但无法解决这个问题。

我这样做了:

// Buzzer PORT and PIN mapping
#define BUZZER_PORT     B       // PORT
#define BUZZER_PIN      2       // PCR pin
#define BUZZER_ALT      1       // Pin alternativne function

#define INIT_BUZZER(PORTX, PIN, ALT) { PORT##PORTX##_PCR(PIN) = PORT_PCR_MUX((ALT)) |     PORT_PCR_DSE_MASK;            GPIO##PORTX##_PDDR |= PIN<<1; }

函数调用工作:

INIT_BUZZER(B, BUZZER_PIN, BUZZER_ALT);

需要的函数调用:

INIT_BUZZER(BUZZER_PORT, BUZZER_PIN, BUZZER_ALT);

如果我使用端口参数 BUZZER_PORT 调用它,则会收到错误,因为编译器不采用我的参数值,而是采用字符串本身。

如何处理这个问题?

最佳答案

尽可能使用括号。

尝试以下: INIT_BUZZER((BUZZER_PORT)、BUZZER_PIN、BUZZER_ALT);

关于c - 预处理器不使用定义的散列值,而是使用宏的定义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17559493/

相关文章:

c - 指向函数内部动态分配缓冲区的静态指针

c - OpenCL:对内置函数的调用不明确

git - Git 如何创建唯一的提交哈希,主要是前几个字符?

if-statement - `if` 的替代实现 - 难以理解的行为

clojure - 什么时候在 Clojure 宏中使用 ~'some-symbol?

android - Nexus 7 上的 droid-VNC 服务器显示嘈杂的白屏

c - 使用 C 语言计算中缀表达式的最简单方法是什么?

c# - HashPasswordForStoringInConfigFile()的输出是什么格式,如何存储最好?

jquery - 如何更改 hash/#/for/#!/

macros - excel vba一次读取整个文本文件