【问题标题】:Is this #define equivalent to this variable definition in C?这个#define 是否等同于C 中的这个变量定义?
【发布时间】:2012-05-28 17:59:43
【问题描述】:
考虑一下#define:
#define msd_buffer ((volatile char *) MSD_BUFFER_ADDRESS)
还有这个变量定义:
volatile char *msd_buffer = MSD_BUFFER_ADDRESS;
msd_buffer 的两个定义——作为变量和作为宏——是等价的吗?
【问题讨论】:
标签:
c
microchip
microprocessors
【解决方案1】:
#define 是一个宏。它充当您传递给它的内容的直接复制面。所以,msd_buffer 不是一个变量,它是一个 volatile char 数组的强制转换。
假设示例用法如下:
msd_buffer[160] = 0xFF;
这与将其用作变量相同。但是,它并不具备变量的所有特性,例如赋值:
msd_buffer = NEW_BUFFER_ADDRESS; // invalid!
或取地址:
my_func(&msd_buffer); // invalid!
如果您了解这些缺点(也许还有更多),那么您就可以使用这样的宏了。
【解决方案2】:
define 语句只是一个文本替换。而已。所以在你的情况下,不是真的。