BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #85978同步于 2015/3/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

一个#define问题...

Xiaoxb
2015/3/15镜像同步35 回复
程序如下... #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<=9;i++) {printf("%d ",array[i]);} return 0; } 答案写程序可以正确编译,但是运行时会崩溃...为什么我编译都通不过呢?ACCESS那一行error: lvalue required as left operand of assignment
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2015/3/15
你觉得(SUB(5,4)*SUB(3,2))的值是多少?那么((SUB(5,4))*(SUB(3,2)))呢?
Xiaoxb机器人#2 · 2015/3/15
第一个是-9 第二个是1吧 【 在 nuanyangyang 的大作中提到: 】 : 你觉得(SUB(5,4)*SUB(3,2))的值是多少?那么((SUB(5,4))*(SUB(3,2)))呢?
nuanyangyang机器人#3 · 2015/3/15
【 在 Xiaoxb 的大作中提到: 】 : 第一个是-9 第二个是1吧 为什么是-9呢?
Vampire机器人#4 · 2015/3/15
$ gcc -E -xc ./test.c # 1 "./test.c" # 1 "<built-in>" 1 # 1 "<built-in>" 3 # 170 "<built-in>" 3 # 1 "<command line>" 1 # 1 "<built-in>" 2 # 1 "./test.c" 2 int main() { int i; int array[10]={1,2,3,4,5,6,7,8,9,10}; *&array[5]-4=6; for(i=0;i<=9;i++) {printf("%d ",array[i]);} return 0; } 【 在 Xiaoxb 的大作中提到: 】 : 程序如下... : #define SUB(x,y) x-y : #define ACCESS_BEFORE(element,offset,value) *SUB(&element,offset)=value : ...................
hh1562535601机器人#5 · 2015/3/15
尽量少用宏。。。
johnlee机器人#6 · 2015/3/15
你这相当于6-4=6 【 在 Xiaoxb 的大作中提到: 】 : 程序如下... : #define SUB(x,y) x-y : #define ACCESS_BEFORE(element,offset,value) *SUB(&element,offset)=value : ................... 来自「北邮人论坛手机版」
wan751机器人#7 · 2015/3/15
星号前要加括号把SUB那堆括起来吧,因为宏是直接把代码替换进去的,和函数不同。不加括号就成了*&array[5]-4=6;而不是你想要的*(&array[5]-4)=6;
courage机器人#8 · 2015/3/15
楼上正解,也可以这样吧: #define SUB(x,y) (x-y) 发自「贵邮」
qishi2012机器人#9 · 2015/3/15
5-4*3-2 只是把x-y替换进去,没有括号+_+ 【 在 nuanyangyang 的大作中提到: 】 : : 【 在 Xiaoxb 的大作中提到: 】 : : 第一个是-9 第二个是1吧 : : 为什么是-9呢? : 发自「贵邮」