以独立于实现的方式获取指向4字节对象的指针

时间:2010-02-21 01:09:08

标签: c++ portability

当我意识到假设一个int可能是一个指向长度为4个字节的指针时,我的编程正常。

因为Some of the aspects of C++’s fundamental types, such as the size of an int, are implementation- defined ..

如果您正在处理具有32位有符号整数样本的某些内容(例如波形),该怎么办?您将字节指针转换为(int *)并一次处理一个样本。

我只是很好奇获取4字节指针的“安全方式”是什么,如果将来MSVC委员会决定int现在是8个字节,则不会停止工作。

Related

5 个答案:

答案 0 :(得分:7)

您的编译器可能有一个名为stdint.h的C99标头。它定义了类似uint32_t的类型,一个无符号的32位整数。

从C ++ 11开始,您的编译器需要具有此标头。您应该将其包含在#include <cstdint>

如果没有,请查看Boost Integer,将此标头模仿为<boost/cstdint.hpp>


要将指针存储为整数,请使用在同一标题中定义的intptr_t

答案 1 :(得分:3)

使用指向uint32_t的指针而不是int。

此类型(和其他类型)在stdint.h中定义,是C99标准的一部分

答案 2 :(得分:0)

我看到它完成的一种方法是使用预编译器指令和typedef抽象出大小。然后使用抽象类型,这些类型对于您要支持的系统集是正确的。

答案 3 :(得分:0)

也许你可以在sizeof(int)上使用一个断言,这样至少如果你的假设在将来被违反,你就会知道。

答案 4 :(得分:0)

到目前为止,最简单的解决方案是char*char[4]。在每个平台上,char[4]是一个4字节的对象。对于整个波形,您可能需要char[4*512]