故意价值溢出安全吗?

Pet*_*lin 2 c windows integer-overflow

这个问题可能是愚蠢或偏执的,但无论如何:-).给出以下代码:

DWORD hiRes;

// will overflow about once in an hour
hiRes = GetTickCount() * 1193L;
Run Code Online (Sandbox Code Playgroud)

如果知道hiRes周期性溢出并且这种情况得到妥善处理,那么这段代码有什么问题吗?

更新: 结果对我来说非常令人惊讶,因为答案取决于hiRes(有符号或无符号)的类型,它由C标准定义(参见例如).

cni*_*tar 6

溢出unsigned int是安全的.溢出已签名的不是(未定义的行为).

MSDN说:

DWORD是32位无符号整数(范围:0到4294967295十进制).此类型声明如下:

typedef unsigned long DWORD
Run Code Online (Sandbox Code Playgroud)

所以它应该是安全的.