有什么理由在dll中定义类型吗?比如#define MODULE_NAME_INT8 __int8
Any reason to define types in dll? Like #define MODULE_NAME_INT8 __int8
所以我在工作中浏览了一些代码,虽然我不是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等等,但由于您的代码很可能是在此之前创建的,因此它没有利用这一点,而是采用了"老式"的方式。
在商业软件中使用包含应用程序使用的所有数据类型的头文件是非常常见的做法。这更像是一种提前思考的措施,而不是保持兼容性。目的是使代码易于移植和易于维护。
由于不能保证代码不必运行不同的体系结构,该体系结构对常见的数据类型使用不同的大小,因此这种做法是非常好的。
- 有没有简单的方法可以将"02:00"转换为分钟,比如 120?
- 有没有办法找到动态内存大小,比如大小?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 使用自定义 nodejs 插件时的"The specified module could not be found"
- 当使用Lua作为嵌入式语言(比如c++)时,有什么简单/方便的方法可以找到变量在Lua中的定义位置吗
- Boost.Python 和导入 dll,"The specified module could not be found"
- 在C++中使用哪个函数来输入多个单词,比如C中的fgets
- 有没有类似的函数,比如 c++ 中的 JS Array.prototype.map?
- 如何在 module.reload() 之后保持 py::objects 存活
- Clang and C++ Module TS
- 在Visual Studio中将python嵌入C ++时"No module named site"
- emscripten 断言=1 生成链接器错误"Referencing global in another module!"
- Nginx - nchan module in Cygwin
- C# 到非托管 C++ DLL 访问冲突/"frame not in module"
- 用 rice/ruby 包裹的纯虚拟 C++ 类在运行时引发 TypeError ( "is not a class (Module)" )
- win32 API 函数 GetModuleFileName 或 GetModuleHandle 中的"Module"是什么?
- 如何基于类定义构建对话框窗口?(比如Django的模型系统)
- '' 的类型初始值设定项<Module>引发异常
- C++是否有指定值范围的比较运算符?(比如'in' E语言)?
- 查找适用于"The specified module could not be found"的 DLL