c/c++语言开发共享如何在不同的机器上保持C变量类型的固定大小?

我有这些function。

ssize_t fuc1(int var1, void *buf, size_t count); int func2(char *charPtr, int mode, int dev); short func3( long var2); 

问题是当在不同的机器(64位和32位)上编译时,C中的数据类型具有不同的大小。 即使是void *也是如此。 出于某些原因。 我需要确保每台机器(64位和32位)的这些尺寸都相同。 那么,我应该如何修改这些呢?

    使用C99, int32_t等类型。 关于维基百科的更多细节 。

    对于指针类型,没有办法做到这一点,因为根据定义,它们是特定于平台的。 没有有效的用例,您可能需要它们保持一致,因为它们不可序列化。 如果使用指针变量来存储指针其他数据(例如,取决于某些标志),请使用某种精确整数类型与指针类型的并集。 或者,使用C99 uintptr_t ,并在需要对其进行处理时uintptr_t为指针。

    解决您的困境的老式方法是使用宏来定义generics类型,并根据目标平台定义这些宏:

    datatypes.h

     #ifndef DATATYPES_H #define DATATYPES_H #ifdef PLATFORM_32_BIT typedef UINT32 unsigned int; // unsigned 32-bit integer typedef UINT16 unsigned short; typedef UINT08 unsigned char; #else // Assume 64 bit platform typedef UINT32 unsigned short; #endif #endif // DATATYPES_H 

    当您绝对需要32位无符号变量时,您将使用UINT32类型。 平台定义可以在命令行上传递给编译器。

    由于我没有在64位平台上工作,因此您必须研究POD类型的位大小。

    你不能,至少不在C ++ 03或C89中。 C99有你可以使用的头文件,它定义了像uint32_t等类型,但是你对C ++运气不好。

    如果你需要它在C ++ 03中工作,你需要使用像Boost :: Integer EDIT这样的东西,或者使用TR1的实现。

    POSH库 (便携式开源线束)可能对您有所帮助。 这是由写入便携式代码的作者Brian Hook创建的。

      以上就是c/c++开发分享如何在不同的机器上保持C变量类型的固定大小?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560231.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐