我喜欢为 VS.NET 和 GCC 提供免费的代码警告,并且我喜欢准备好我的 64 位代码。
今天我写了一个小模块,它处理内存缓冲区并通过文件样式接口提供对数据的访问(例如,您可以读取字节、写入字节、四处寻找等)。
作为当前读取位置和大小的数据类型,我使用了 size_t,因为这似乎是最自然的选择。我绕过警告,它也应该在 64 位下工作。
以防万一:我的结构如下所示:
typedef struct
{
unsigned char * m_Data;
size_t m_CurrentReadPosition;
size_t m_DataSize;
} MyMemoryFile;
的符号size_t
似乎在实践中没有定义。谷歌代码搜索证明了这一点。
现在我处于两难境地:我想检查是否有size_t
溢出,因为我必须处理用户提供的数据,而第三方库将使用我的代码。但是,对于溢出检查,我必须知道符号。它在实施中产生了巨大的差异。
那么 - 我到底应该如何以独立于平台和编译器的方式编写这样的代码?
我可以size_t
在运行或编译时检查签名吗?那将解决我的问题。或者,也许size_t
一开始就不是最好的主意。
有任何想法吗?
编辑:我正在寻找 C 语言的解决方案!