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标准定义(参见例如).
溢出unsigned int是安全的.溢出已签名的不是(未定义的行为).
MSDN说:
DWORD是32位无符号整数(范围:0到4294967295十进制).此类型声明如下:
Run Code Online (Sandbox Code Playgroud)typedef unsigned long DWORD
所以它应该是安全的.