宏 - 表达式不可分配

And*_*CRD -2 c macros c-preprocessor

编译时出现此错误:

macro.c:11:2: error: expression is not assignable
    ProdottoAumentato(10, 20);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样说,我找不到任何错误.这是代码:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

#define ProdottoAumentato(X, Y)    X++; X * Y;

int main(void) {

    ProdottoAumentato(10, 20);

    printf("\nEnd\n");
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

eml*_*lai 7

宏执行文本替换.所以ProdottoAumentato(10, 20);用以下内容替换:

10++; 10 * 20;;
Run Code Online (Sandbox Code Playgroud)

10++无效.您无法修改文字,这是错误消息"表达式不可分配"所指的内容.

那我怎么能增加那个值呢?

您需要将值分配给变量以进行修改.请参阅Vittorio Romeo的答案,以此为例.


das*_*ght 5

不是任何想象力的功能.X在宏中用文本替换宏的第一个参数; 同样的做法Y- 它被替换为第二个参数.

表达式10++无效,原因与10 = 10+1无效相同.但是,这是宏扩展后得到的表达式,这是编译器通过其"表达式不可赋值"错误告诉您的.