【问题标题】:C: error C2105: '++' needs lvalueC: 错误 C2105: '++' 需要左值
【发布时间】:2014-12-20 14:19:07
【问题描述】:

Windows、MSVS 2010。

我无法理解为什么会产生编译错误:

#define INC(X) X++

int main() {

    int X; 
    printf("%d", INC(X++)); 

    return 0; 

}

错误:

错误 1 ​​错误 C2105: '++' 需要 l-value testing.cpp 19 1 测试

【问题讨论】:

    标签: c compiler-errors macros


    【解决方案1】:

    扩展宏的结果是X++++

    后缀++ 运算符将变量的值递增并返回递增前的值。它不返回左值(变量) - 只是一个值。你不能对它应用++,就像你不能调用3++一样。

    【讨论】:

      【解决方案2】:

      类似的宏定义

      INC(X++)
      

      相同
      X++++
      

      也就是说,(根据贪婪的编译器规则)(X++)++

      请记住,#define 宏不是函数调用,而是在预处理阶段发生的文本替换,因此,从本质上讲,您的代码看起来像 (5++)++,这是无效的,因为可以使用递增/递减运算符变量 [lvalue],而不是值本身(非左值)。

      注意:你可以增加一个变量所持有的。你不能增加一个值本身。 这里,X 不是变量。作为 MACRO 扩展的一部分,它在预处理时替换为 5

      总而言之,你不能做像5++这样的事情,就像将5增加1并将其存储到5

      【讨论】:

        【解决方案3】:
        INC(X++)
        

        扩展到

        X++++
        

        也就是说,

        (X++)++
        

        ...而X++ 不是左值,所以不能自增。

        【讨论】:

          猜你喜欢
          • 2013-08-15
          • 2017-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多