我有这些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