【问题标题】: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 语句只是一个文本替换。而已。所以在你的情况下,不是真的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多