GCC的“无效指针算术”是否具有确定性?

时间:2016-11-24 09:37:17

标签: c++ pointers gcc

我遇到过一个包含以下代码的C ++库:

void *data;
unsigned length;
...
addr = data + length

首先,使用 void * arithmetics 没有多大意义,因为编译器不知道每个元素的“大小”是什么(这里有更好的解释: void * arithmetic)。

但是,因为我已经使用了我的代码库,它似乎工作,我想知道以下内容。这种行为是否具有确定性,因为所有GCC每次都会生成相同的代码?或者,GCC会以启发式方式对其进行优化吗?

1 个答案:

答案 0 :(得分:7)

指针算法在void*指针上的行为是未定义

GCC允许它作为非标准编译器扩展(基本上将void*作为char*用于指针算法)。