【发布时间】:2019-01-09 14:32:57
【问题描述】:
我是 C/C++ 的新手,以防万一:) 我克隆了一个用 C 语言编写的旧协议栈解决方案,其中一个 C++ 主类将其导入 VS (Visual C++ 2017 v 15.9.5 面向 Windows SDK 10.0.17134.0)它编译正确并且工作正常。
现在制作了一个 C++ 解决方案(Windows 控制台应用程序)创建了一个文件夹 lib,将所有 .h 和 .c 文件复制粘贴到 lib 中,添加了 additional include directories 的路径以及链接器 additional library directories。
构建解决方案会引发大量错误。我现在要解决的问题是:
其中一个头文件包含类型定义
typedef uint8_t U8;
#ifndef BOOL
typedef U8 BOOL;
#endif
但这与 Windows 套件中的 minwindef.h 冲突。虽然我#include types.h 得到C2371 'BOOL': redefinition; different basic types
在整个解决方案中,我想使用 BOOL 的这个定义以及这个标题中定义的所有其他定义。
我应该如何解决这个问题?或者一般来说,如果在 C++ 项目中使用 C 代码,我应该遵循哪些设置和宏(例如方法中的外部“C”)
【问题讨论】:
-
我会删除
typedef U8 BOOL定义。#ifndef宏不能防止 typedef。 -
作为同时 C 和 C++ 的新手,您现在应该牢记一个重要的教训:C 和 C++ 是不同的语言。没有“C/C++”。不能假定用任何一种语言编写的随机代码在另一种语言中具有相同的语义,甚至可能无法在另一种语言中编译。用两种语言编写具有相同语义的代码很棘手。
-
@Jean-FrançoisFabre 我不认为这是有意的。在宏尚未完成该工作的情况下,它会添加一个新的类型别名。不幸的是,在这种情况下,一些其他类型的别名也已经完成了这项工作。
-
这似乎更多是关于旧库和 Windows 头文件之间的兼容性,而不是特别是关于 C 或 C++。
-
你说你已经“克隆了一个 older 协议栈解决方案”(强调我的)。是否可以获得具有固定 Windows 兼容性的该库的 更新 版本?或者也许可以找到其他适用于 Windows 的库?
标签: c++ c visual-c++