#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)
就可以实现功能