我遇到过一个包含以下代码的C ++库:
void *data;
unsigned length;
...
addr = data + length
首先,使用 void * arithmetics 没有多大意义,因为编译器不知道每个元素的“大小”是什么(这里有更好的解释: void * arithmetic)。
但是,因为我已经使用了我的代码库,它似乎工作,我想知道以下内容。这种行为是否具有确定性,因为所有GCC每次都会生成相同的代码?或者,GCC会以启发式方式对其进行优化吗?
答案 0 :(得分:7)
指针算法在void*
指针上的行为是未定义。
GCC允许它作为非标准编译器扩展(基本上将void*
作为char*
用于指针算法)。