有什么理由在dll中定义类型吗?比如#define MODULE_NAME_INT8 __int8

Any reason to define types in dll? Like #define MODULE_NAME_INT8 __int8

本文关键字:MODULE 比如 #define NAME int8 INT8 理由 什么 dll 类型 定义      更新时间:2023-10-16

所以我在工作中浏览了一些代码,虽然我不是c++专家,但我认为可以肯定地说代码有点乱。不过我还是想确认一件事。在代码中,每个类型都是这样定义的:

#define MODULE_NAME_INT8 __int8

unsigned, 16,32和64位,bool, null, true和false也一样。这其中有什么原因吗?它在一个dll中,应用程序的其他部分是用c#编写的,所以也许有一些我没有想到的东西?

对我来说,这真的像是一个完全的浪费和对定义的误用。我的意思是,类型名称在定义中,它基本上只是重命名类型,为什么要让代码像这样混乱?我是对的,还是我错过了什么?

我认为这些定义是有意义的。如果这个代码有点旧,MSVC 2008和之前没有stint .h和cstint。因此,标准类型int8_t不能使用,程序员决定将Windows特定的__int8隐藏在定义之后,只有在代码必须移植到另一个平台(或仅仅是不同的编译器)时才需要更改定义

类型前的双下划线是特定于编译器的。通常,如果代码应该使用不同的编译器或平台构建,那么您可以从相同的源代码构建,并且类型保持不变,则可以看到这样的定义。

虽然这会使代码变得混乱,但是如果你想在多个平台上构建,例如只使用"int"可能是危险的,因为在c++中int没有标准定义的大小(int可能是1,2,4,8字节)。

c++ 11为此引入了固定类型:int8_t、int16_t等等,但由于您的代码很可能是在此之前创建的,因此它没有利用这一点,而是采用了"老式"的方式。

在商业软件中使用包含应用程序使用的所有数据类型的头文件是非常常见的做法。这更像是一种提前思考的措施,而不是保持兼容性。目的是使代码易于移植和易于维护。

由于不能保证代码不必运行不同的体系结构,该体系结构对常见的数据类型使用不同的大小,因此这种做法是非常好的。