宏定义问题

#include<stdio.h>
#define SUB(x,y) x-y
#define ACCESS_BEFORE(element,offset,value) *SUB(&element, offset)
=value

int main()
{
int i;
int array[10] = {1,2,3,4,5,6,7,8,9,10};
ACCESS_BEFORE(array[5], 4 ,6);
for(i = 0; i < 10; ++i) { printf(“%d “, array[i]); }
return 0;
}

ACCESS_BEFORE的宏定义被预处理器替换成了:*&array[5] – 4 = 6;

*和&的事先级都比减号高,所以,*&array[5]的结果是一个数值,等号两边都是数值,所以会编译错误,因为等号的左值必须为变量

所以那多少个顺序编译错误。

假使改成 SUB(x,y) (x-y)

就可以实现效益

相关文章