考虑这个#define
:
#define msd_buffer ((volatile char *) MSD_BUFFER_ADDRESS)
和这个变量定义:
volatile char *msd_buffer = MSD_BUFFER_ADDRESS;
msd_buffer
的两个定义 - 变量和宏 - 等价吗?
答案 0 :(得分:3)
#define
是一个宏。它可以作为您传递给它的直接复制品。因此,msd_buffer
不是变量,它是对易变的char数组的强制转换。
假设像这样的示例用法:
msd_buffer[160] = 0xFF;
与将其用作变量相同。但是,它没有变量的所有功能,例如赋值:
msd_buffer = NEW_BUFFER_ADDRESS; // invalid!
或致辞:
my_func(&msd_buffer); // invalid!
如果您了解这些缺点(也许还有更多),那么您就可以使用这样的宏。
答案 1 :(得分:1)
define语句只是一个文本替换。而已。所以在你的情况下,不是真的。