返回信息流程序如下...
#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
这是一条镜像帖。来源:北邮人论坛 / cpp / #85978同步于 2015/3/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
一个#define问题...
Xiaoxb
2015/3/15镜像同步35 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
第一个是-9 第二个是1吧
【 在 nuanyangyang 的大作中提到: 】
: 你觉得(SUB(5,4)*SUB(3,2))的值是多少?那么((SUB(5,4))*(SUB(3,2)))呢?
$ 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
: ...................
你这相当于6-4=6
【 在 Xiaoxb 的大作中提到: 】
: 程序如下...
: #define SUB(x,y) x-y
: #define ACCESS_BEFORE(element,offset,value) *SUB(&element,offset)=value
: ...................
来自「北邮人论坛手机版」
星号前要加括号把SUB那堆括起来吧,因为宏是直接把代码替换进去的,和函数不同。不加括号就成了*&array[5]-4=6;而不是你想要的*(&array[5]-4)=6;
5-4*3-2 只是把x-y替换进去,没有括号+_+
【 在 nuanyangyang 的大作中提到: 】
:
: 【 在 Xiaoxb 的大作中提到: 】
: : 第一个是-9 第二个是1吧
:
: 为什么是-9呢?
:
发自「贵邮」