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)
宏执行文本替换.所以ProdottoAumentato(10, 20);
用以下内容替换:
10++; 10 * 20;;
Run Code Online (Sandbox Code Playgroud)
10++
无效.您无法修改文字,这是错误消息"表达式不可分配"所指的内容.
那我怎么能增加那个值呢?
您需要将值分配给变量以进行修改.请参阅Vittorio Romeo的答案,以此为例.
宏不是任何想象力的功能.X
在宏中用文本替换宏的第一个参数; 同样的做法Y
- 它被替换为第二个参数.
表达式10++
无效,原因与10 = 10+1
无效相同.但是,这是宏扩展后得到的表达式,这是编译器通过其"表达式不可赋值"错误告诉您的.