1
#include<vector>
#include<stdint.h>
#define RAM_M_V_INSERT_T32(vec,Long,pos) \
vec.at(pos)=(((tU8)((Long) >> 24)) & 0xFF); \
pos++;\
vec.at(pos)=(((tU8)((Long) >> 16)) & 0xFF); \
pos++;\
vec.at(pos)=(((tU8)((Long) >> 8)) & 0xFF); \
pos++;\
vec.at(pos)=(((tU8)((Long))) & 0xFF);

int main()
{  
std::vector<char> c8vBuf;
c8vBuf.at(0)=(char)SYSTEM_U32_SHUTDOWN_CPU_WATCHDOG;
RAM_M_V_INSERT_T32(c8vBuf, (_u32WdtCount - 1),1);
RAM_M_V_INSERT_T32(c8vBuf, _u32WdtCount,5);
return 0;
}

当我尝试编译时,出现此错误,与递增操作数有关

cstr.cpp:19:3: error: lvalue required as increment operand
cstr.cpp:19:3: error: lvalue required as increment operand
cstr.cpp:19:3: error: lvalue required as increment operand
cstr.cpp:20:3: error: lvalue required as increment operand
cstr.cpp:20:3: error: lvalue required as increment operand
cstr.cpp:20:3: error: lvalue required as increment operand

任何人请阐明这一点???

4

2 回答 2

3

宏基本上将执行通过预处理器发生的文本替换。

该宏会将您的代码变成类似1++and的东西5++。这些是整数文字,这意味着编译器将它们标记为“纯”右值(prvalues)。prvalues 与 l-values 不同

于 2013-10-17T04:08:17.960 回答
2

鉴于您将++运算符应用于pos参数,您不能将像 1 或 5 这样的常量作为第三个参数传递给宏。任何让你这样做的编译器都是错误的。

于 2013-10-17T04:08:07.150 回答