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

时间:2015-06-09 08:26:34

标签: c++

所以我在工作中经历了一些代码,虽然我不是c ++的专家,但我认为可以说代码有点乱。我仍然希望确认一些事情。在代码中,每个类型的定义如下:

#define MODULE_NAME_INT8 __int8

对于无符号,16,32和64位以及bool,null,true和false也是如此。这可能是有原因的吗?它是在一个DLL中,应用程序的其他部分是用C#编写的,所以也许有一些我没有想过的东西?

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

3 个答案:

答案 0 :(得分:1)

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

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

C ++ 11 introduced fixed types for this purpose:int8_t,int16_t等等,但由于您的代码很可能在此之前很久才创建,因此它没有利用这一点,而且是#34; old-塑成"方式。

答案 1 :(得分:1)

我认为这些定义是有道理的。如果这段代码有点陈旧,那么MSVC 2008和之前没有stdint.h和cstdint。因此,标准类型int8_t无法使用,并且程序员决定隐藏定义后面的Windows特定__int8,只需要更改定义,如果代码必须移植到另一个平台(或简单地不同的编译器)

答案 2 :(得分:0)

具有应用程序使用的所有数据类型的头文件在商业软件中是非常常见的做法。 与维护兼容性相比,它更像是一种前瞻性思维。目的是使代码易于携带且易于维护。

由于无法保证代码不必运行使用不同大小的公共数据类型的不同架构,因此这种做法非常好。