我知道,人们通常用一个值来定义宏,如:宏预处理,多个值
#define PIN0 0x01
,但又有什么用这一个多值是什么意思?
#define POWER_UP 0x02, 0x01, 0x00, 0x01, 0xC9, 0xC3, 0x80
假设我需要依次发送数据包0x02,0x01,0x00 ....如果不使用这个宏,我可能会使用一个数组。然而,工具链生成这个宏给我,但我不知道如何使用它来发送数据包。它看起来不像宏的数组定义。有谁知道我会如何使用它?
我知道,人们通常用一个值来定义宏,如:宏预处理,多个值
#define PIN0 0x01
,但又有什么用这一个多值是什么意思?
#define POWER_UP 0x02, 0x01, 0x00, 0x01, 0xC9, 0xC3, 0x80
假设我需要依次发送数据包0x02,0x01,0x00 ....如果不使用这个宏,我可能会使用一个数组。然而,工具链生成这个宏给我,但我不知道如何使用它来发送数据包。它看起来不像宏的数组定义。有谁知道我会如何使用它?
不是真的知道你是问有关数据包的内容(一些更多的代码将帮助),但:
char vals[] = { POWER_UP };
size_t i;
for (i = 0; i < sizeof(vals); ++i) {
/* do something with vals[i] */
}
谢谢!这有助于! – Shan
//test.c
#define POWER_UP 0x02, 0x01, 0x00, 0x01, 0xC9, 0xC3, 0x80
POWER_UP
#only preprocessing
>gcc -E test.c
# 1 "test.c"
# 1 "<command-line>"
# 1 "test.c"
0x02, 0x01, 0x00, 0x01, 0xC9, 0xC3, 0x80
正如你可以看到它将会取代宏将值列表。
只要引用POWER_UP
宏,它就简单地扩展到0x02, 0x01, 0x00, 0x01, 0xC9, 0xC3, 0x80
。
这并不意味着有什么特别。像往常一样,只要左手边出现,右手边就会被替换掉。 –
有没有什么办法可以从宏中逐一提取值?例如,如果我想单独打印0x02和0x01和0x00 ...等等? – Shan