相关疑难解决方法(0)

如何将旧C代码与C++中的保留关键字链接起来?

我有一个10岁以上的C库 - 我相信 - 曾经在过去的好日子里工作得很好,但是当我尝试将它与C++源码(包含主要功能)一起使用时,有一天我遇到了有些困难.

编辑:澄清一下,C库编译得很好gcc,它会生成一个目标文件old_c_library.o.该库认为在某种程度上,这样的C头文件中使用的old_c_library.h#include在D main.cC源文件.然后你的主要C源文件应该编译并与old_c_library.ovia 链接在一起gcc.在这里,我想使用C++源文件main.cpp,并编译/链接它g++.

在编译C++源文件期间发生了以下三个问题:

  1. C库的一个头文件包含C++保留字new(它是一个整数的名称),导致致命错误; 和
  2. C库的一个头文件包含一个calloc调用(缺少显式类型转换),导致致命错误; 和
  3. C库的各种文件包含发生有符号和无符号整数比较的代码,这会导致警告.

编辑:我试图使用#extern "C" { #include "obsolete_c_library.h" }"技巧",如评论中所建议,但这并没有解决我的任何问题.

我可以通过重命名保留字的所有实例并用 - 基本上 - 替换它们来解决问题1.我可以通过类型化calloc调用来解决问题2 .我可能会尝试通过这里建议的想法来解决警告:如何禁用几行代码的GCC警告.

但我仍然想知道,有没有办法以优雅,高层次的方式克服这些困难,而不是真正触及原始图书馆?


相关: C在哪里不是C++的子集?并且不要我投malloc的结果?以及如何使用extern在源文件之间共享变量?.

c c++ portability suppress-warnings

12
推荐指数
1
解决办法
1527
查看次数

标签 统计

c ×1

c++ ×1

portability ×1

suppress-warnings ×1