这个#define是否相当于C中的这个变量定义?

时间:2012-05-28 17:59:43

标签: c microchip microprocessors

考虑这个#define

#define msd_buffer              ((volatile char *) MSD_BUFFER_ADDRESS)

和这个变量定义:

volatile char *msd_buffer = MSD_BUFFER_ADDRESS;

msd_buffer的两个定义 - 变量和宏 - 等价吗?

2 个答案:

答案 0 :(得分:3)

#define是一个宏。它可以作为您传递给它的直接复制品。因此,msd_buffer不是变量,它是对易变的char数组的强制转换。

假设像这样的示例用法:

msd_buffer[160] = 0xFF;

与将其用作变量相同。但是,它没有变量的所有功能,例如赋值:

msd_buffer = NEW_BUFFER_ADDRESS; // invalid!

或致辞:

my_func(&msd_buffer); // invalid!

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

答案 1 :(得分:1)

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