Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 宏定义函数 #包括 #定义下一个(x)x+1 #定义上一个(x)x-1 #定义多(x,y)x*y 内部主(空){ INTA=3,b=4; printf(“%d\n”,mult(next(a),prev(b)); 返回0; }_C - Fatal编程技术网

C 宏定义函数 #包括 #定义下一个(x)x+1 #定义上一个(x)x-1 #定义多(x,y)x*y 内部主(空){ INTA=3,b=4; printf(“%d\n”,mult(next(a),prev(b)); 返回0; }

C 宏定义函数 #包括 #定义下一个(x)x+1 #定义上一个(x)x-1 #定义多(x,y)x*y 内部主(空){ INTA=3,b=4; printf(“%d\n”,mult(next(a),prev(b)); 返回0; },c,C,mult(next(3),prev(4))扩展为mult(3+1,4-1),即12。但答案是6 为什么会这样?。。。并且mult(3+1,4-1)扩展到 #include <stdio.h> #define next(x) x + 1 #define prev(x) x - 1 #define mult(x,y) x * y int main(void) { int a = 3, b = 4; printf("%d\n", mult(next(a), prev(b))); re

mult(next(3),prev(4))
扩展为
mult(3+1,4-1)
,即12。但答案是6

为什么会这样?

。。。并且
mult(3+1,4-1)
扩展到

#include <stdio.h>

#define next(x) x + 1
#define prev(x) x - 1
#define mult(x,y) x * y

int main(void) {

int a = 3, b = 4;
printf("%d\n", mult(next(a), prev(b)));
return 0;

}
结果是3+4-1或6

在类似宏定义的函数中,在每个参数和整个定义周围都加上括号

3+1 * 4-1

尝试将
#define next(x)x+1更改为#define next(x)(x+1),并对prev()执行相同的操作。
您可能希望遵循在所有大写字母中命名宏标识符的标准做法,以便在代码中明确它的特殊性。
#define next(x) ((x) + 1)
#define prev(x) ((x) - 1)
#define mult(x, y) ((x) * (y))