C / C ++后递增不止一个

Ste*_* Lu 6 c c++ operators post-increment

我正在从缓冲区读取字节。但是有时候我读的是一个单词或更长时间。

// assume buffer is of type unsigned char *
read_ptr(buffer+(position++))
Run Code Online (Sandbox Code Playgroud)

很好,但是如何将位置增加2或4?我无法让+=操作员后期递增,是吗?

原因是,我有一个很糟糕的表达式要评估,同时要增加位置变量。

我想我想出了自己的解决方案。我很确定它能起作用。每个人都会讨厌它,因为这不是易读的代码。

read_ptr(buffer+(position+=4)-4)
Run Code Online (Sandbox Code Playgroud)

经过一点测试以确保它做对了之后,我将其放入宏中。

结论:

不要这样 这只是一个坏主意,因为这是生成无法维护的代码的一种东西。但是...事实证明,将任何一个预递增运算符转换为一个后递增运算符确实很容易。

Ste*_* Lu 2

好吧,我确实在编辑中回答了我的问题...基本上我想要的是一个单个表达式,它计算原始值,但具有任意增量的副作用。这是一些宏。

#define INC(x,inc) (((x)+=(inc))-(inc))
#define INC2(x) INC(x,2)
#define INC4(x) INC(x,4)
#define INC8(x) INC(x,8)
Run Code Online (Sandbox Code Playgroud)