考虑一下#define
:
#define msd_buffer ((volatile char *) MSD_BUFFER_ADDRESS)
和这个变量定义:
volatile char *msd_buffer = MSD_BUFFER_ADDRESS;
msd_buffer
作为变量和作为宏的两个定义是等价的吗?
考虑一下#define
:
#define msd_buffer ((volatile char *) MSD_BUFFER_ADDRESS)
和这个变量定义:
volatile char *msd_buffer = MSD_BUFFER_ADDRESS;
msd_buffer
作为变量和作为宏的两个定义是等价的吗?
A#define
是一个宏。它充当您传递给它的内容的直接复制面。所以,msd_buffer
不是一个变量,它是一个 volatile char 数组的强制转换。
假设示例用法如下:
msd_buffer[160] = 0xFF;
这与将其用作变量相同。但是,它不具备变量的所有特性,例如赋值:
msd_buffer = NEW_BUFFER_ADDRESS; // invalid!
或取地址:
my_func(&msd_buffer); // invalid!
如果您了解这些缺点(也许还有更多),那么您就可以使用这样的宏了。
定义语句只是文本替换。而已。所以在你的情况下,不是真的。