2

考虑一下#define

#define msd_buffer              ((volatile char *) MSD_BUFFER_ADDRESS)

和这个变量定义:

volatile char *msd_buffer = MSD_BUFFER_ADDRESS;

msd_buffer作为变量和作为宏的两个定义是等价的吗?

4

2 回答 2

3

A#define是一个宏。它充当您传递给它的内容的直接复制面。所以,msd_buffer不是一个变量,它是一个 volatile char 数组的强制转换。

假设示例用法如下:

msd_buffer[160] = 0xFF;

这与将其用作变量相同。但是,它不具备变量的所有特性,例如赋值:

msd_buffer = NEW_BUFFER_ADDRESS; // invalid!

或取地址:

my_func(&msd_buffer); // invalid!

如果您了解这些缺点(也许还有更多),那么您就可以使用这样的宏了。

于 2012-05-28T18:03:11.020 回答
1

定义语句只是文本替换。而已。所以在你的情况下,不是真的。

于 2012-05-28T18:03:06.117 回答