gpt4 book ai didi

c++ - 将 C++ 代码从 win32 移植到 Linux 的数据类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:29 26 4
gpt4 key购买 nike

我有一个使用 win32 编写的 c++ 代码。在它使用的数据类型方面:

  1. 基元(int、double、float、bool、long,...)

  2. Windows 数据类型(INT、SHORT、LONG、BOOL、BYTE、WCHAR、...)

  3. 和一些其他数据类型:__int64wchar_t

问题:

我。要将这段代码移植到 Linux,我应该使用什么数据类型?

二。或者,要使其跨平台(Linux 和 win32),这些数据类型是否与 (i) 中的数据类型不同?

提前致谢!

最佳答案

当然,您应该使用该语言提供的数据类型。这些是基本数据类型,例如 charint .除此之外,使用 int8_t , int16_t , ... 等等,在 <cstdint> 中定义标题。

注意 BOOL不过,如果我没记错的话,Windows 的某些部分定义了 BOOL作为char ,而其他人则使用 int .而且我认为甚至有些地方的值不是 TRUE。和 FALSE (分别为 10 )与数据类型 BOOL 一起使用.

因此,天真地改变每个BOOLbool每个WCHARwchar_t如果将这些类型用于序列化,在重载解析方面可能会导致意外,甚至会以极大的方式破坏您的代码。

我想到的另一件事是 Window 处理所有这些 ASCII/Unicode 的方式 TCHAR s 可能最终为 CHARWCHAR ,取决于您的预处理器定义,因此您需要决定如何传输这些。


一些一般性建议:

不要滥用类型。例如,不要将变量、参数和返回类型定义为 int如果它们存储句柄或指针之类的东西(例如 HINSTANCEHWND 以及诸如此类的东西)。而是为此定义一个有意义的类型,例如

using native_handle_t = HINSTANCE;

然后很容易为 linux 或其他平台提供替代定义,无需搜索和更改整个代码库。

当谈到序列化时,例如写入二进制文件时,您应该坚持使用固定大小的类型( uint8_tuint16_t ……),因为它们在每个平台上的大小都合适。使用 long 发送网络数据包s 在大小为 long 的平台上是4并在 long 的平台上阅读它们的大小是 8不一定是好事!

关于c++ - 将 C++ 代码从 win32 移植到 Linux 的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46076114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com