为何SDL_RWFromConstMem()的size参数用int而非unsigned int?
关于SDL_RWFromConstMem() size参数类型的疑问解答
这个设计核心是历史兼容性。SDL早期版本(比如SDL 1.x)的API大量使用
int作为大小参数,当时C生态里unsigned类型的跨平台兼容性不如int稳定,很多老系统、编译器对unsigned的处理存在差异,为了保证API在各类环境下都能正常工作,就延续了int类型的设计。虽然
std::vector.size()返回的是无符号的size_t,但用int确实有个明显限制:当数据大小超过int的最大值(通常是2^31-1,约2GB)时,会出现数值溢出,传递给函数的实际值会变成负数。不过SDL的RWops机制本身对超大内存块的支持有限,多数实际场景下的数据量不会达到这个阈值,所以这个设计一直没有调整。正常情况下数据大小不可能小于0,但
int类型允许传入负数。不过你不用担心误传的问题,SDL_RWFromConstMem()内部会校验size的合法性,只要size≤0,函数会直接返回NULL。
内容的提问来源于stack exchange,提问作者Star1ight-
相关产品推荐
相关产品推荐

