2013-12-13 63 views
1

我知道,人们通常用一个值来定义宏,如:宏预处理,多个值

#define PIN0 0x01 

,但又有什么用这一个多值是什么意思?

#define POWER_UP 0x02, 0x01, 0x00, 0x01, 0xC9, 0xC3, 0x80 

假设我需要依次发送数据包0x02,0x01,0x00 ....如果不使用这个宏,我可能会使用一个数组。然而,工具链生成这个宏给我,但我不知道如何使用它来发送数据包。它看起来不像宏的数组定义。有谁知道我会如何使用它?

+0

这并不意味着有什么特别。像往常一样,只要左手边出现,右手边就会被替换掉。 –

+0

有没有什么办法可以从宏中逐一提取值?例如,如果我想单独打印0x02和0x01和0x00 ...等等? – Shan

回答

2

不是真的知道你是问有关数据包的内容(一些更多的代码将帮助),但:

char vals[] = { POWER_UP }; 
size_t i; 

for (i = 0; i < sizeof(vals); ++i) { 
    /* do something with vals[i] */ 
} 
+0

谢谢!这有助于! – Shan

2
//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 

正如你可以看到它将会取代宏将值列表。

0

只要引用POWER_UP宏,它就简单地扩展到0x02, 0x01, 0x00, 0x01, 0xC9, 0xC3, 0x80