我有一个(大型)C/C++ 项目,它由 C 和 C++ 语言组成。在某些时候,事实证明有两个具有相同名称的 C 函数。这些函数在不同位置的两个不同 *.c 文件中定义。一般来说,最高级别的项目是 C++。这个问题在这里被质疑和回答
然而,仍然存在“如何安全地组织这些文件”的问题。我怎样才能对这样的项目进行分组以便没有名称冲突,并且我可以确定调用了正确的函数。为每个函数编写一个包装器会有帮助吗?
现在的样子: Ah //函数 F 的第一个声明 Ac //函数 F 的第一个定义
Bh //第二次声明函数F Bc //第二次定义函数F
试图做这样的事情:
extern "C"{
#include "A.h"
#include "B.h"
}
课程名称冲突的原因。我能做些什么来避免这种冲突,并拥有健壮的代码?这样的解决方案是否有帮助:
A_Wrapper.h: //c++
extern "C"{
#include "A.h"
}
void WrapF_A(int x)
{
F(x);
}
B_Wrapper.h: //C++
extern "C"{
#include "B.h"
}
void WrapF_B(int x)
{
F(x);
}
然后在程序中:
#include A_Wrapper.h
#include B_Wrapper.h
修改该项目中的每个文件是相当不可能的,因为它包含数百个文件,而且我可能会损坏一些代码。有没有办法让包含文件只在程序的某些部分可见?
编辑:所以我创建了一个简单的项目来说明这个问题,并尝试应用医生爱给出的提示。但是仍然会出现 F 错误的多重定义。我应该改变什么?项目文件:
啊:
#ifndef A_H_INCLUDED
#define A_H_INCLUDED
int F(int x);
#endif // A_H_INCLUDED
交流电
#include "A.h"
int F(int x)
{
return x*x;
}
AWrapper.h:
#ifndef AWRAPPER_H_INCLUDED
#define AWRAPPER_H_INCLUDED
int AF(int x);
#endif // AWRAPPER_H_INCLUDED
AW.cpp:
#include "AWrapper.h"
extern "C"{
#include "A.h"
}
int AF(int x)
{
return F(x);
}
乙:
#ifndef B_H_INCLUDED
#define B_H_INCLUDED
int F(int x);
#endif // B_H_INCLUDED
公元前:
#include "B.h"
int F(int x)
{
return -x*x;
}
BWrapper.h:
#ifndef BWRAPPER_H_INCLUDED
#define BWRAPPER_H_INCLUDED
int BF(int x);
#endif // BWRAPPER_H_INCLUDED
BW.cpp:
#include "BWrapper.h"
extern "C"{
#include "B.h"
}
int BF(int x)
{
return F(x);
}