包括包含标准包含的 C 头文件(无 C++11)

Including C header file containing standard includes (without C++11)

我已经看过以下两篇关于同一主题的帖子: Post1 Post2。我有一个类似的问题,但不一样(我猜)。所以在这里发帖。对不起,如果它仍然是重复的。

我有一个 C 静态库 (libComm.a),其中包含以下 ..

的实现

comm.h:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <math.h>
.....
typedef struct _CDef {} CommDef;

我收到了这个文件。我无论如何也不能改变它。除此之外我还有另一个 Cpp 库 (libfw.a):

fw.h:

namespace fw { namespace ipc {
class A { ...... };
} }

我的目标是在我的 C++ 应用程序中使用这两个库:

myCppApp.cpp

#include "fw.h"
extern "C" {
#include "comm.h"
}

namespace chat { namespace comm {
class CppApplication
{
private:
   CommDef def;
   fw::ipc::A ipc;
};
}
}

当我想编译这个的时候,编译器找不到,"fw::ipc::A"。但如果我不使用 C 头文件和相应的数据类型,一切正常。

我意识到这是因为我包含的头文件包含标准 C 包含文件。所以,我的问题是如何解决这个编译问题并在最后 link 成功地进入 lib,条件如下:

  1. 不改变交付的来源
  2. 没有使用 C++11 来包含相应的 CPP 定义,因为第 1 点

非常感谢您的宝贵时间。

问题是 C 头文件正在用 #defines 污染预处理器。一种可能性是事后使用 #undef:

进行清理
extern "C" {
#include "comm.h"
}
#undef ipc
// ...

另一个选项是在包含 C 头文件之前为无法访问的名称添加别名:

#include "fw.h"
typedef fw::ipc::A fw_ipc_A;
extern "C" {
#include "comm.h"
}
// ...
fw_ipc_A ipc_;