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

rph*_*rph 2 c++ gcc pointers

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

void *data;
unsigned length;
...
addr = data + length
Run Code Online (Sandbox Code Playgroud)

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

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

Bat*_*eba 7

指针运算对void*指针的行为是未定义的.

GCC允许它作为一个非标准编译器扩展(基本上关于void*作为char*用于指针运算的目的).

  • 那在*非标准编译器扩展*模式中意味着什么? (2认同)