【发布时间】:2015-08-14 13:15:10
【问题描述】:
考虑以下宏:
#define FOO(a,b) (--a)* 8 + (--b);
现在
int graph[8][8] = { 0 };
int *graph_p = &(graph[0][0]);
int *p = graph_p + FOO(2, 3);
为什么会出现错误:
IntelliSense:表达式必须是可修改的左值
【问题讨论】:
-
因为
FOO(2, 3);扩展为(--2)* 8 + (--3);— 您不能将预减运算符应用于常量整数值 -
如果你增加(即修改)一个整数常量,你认为会发生什么?
-
好的...谢谢大家!
-
不要编写讨厌的函数式宏,所有问题都会迎刃而解。