我有一个包含C和C++语言的(大型)C/C++项目。事实证明,有两个名称相同的C函数。这些函数在不同位置的两个不同的* .c文件中定义。通常在最高级别上,该项目是C++。这个问题被质疑和回答here如何安全地设置C/C++项目(文件组织)
但仍然有一个问题“如何安全地组织这些文件”仍然存在。我如何分组这样的项目,以便不存在名称冲突,并且我可以确定正确的函数被调用。为每个函数编写包装会有帮助吗?
那它是如何看的那一刻:的函数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
在这个项目中对每个文件进行缓冲将是相当不可能的,因为它涉及数百个文件,而且我可能会损坏一些代码。有没有办法让程序的某些部分只能看到包含文件?
编辑: 因此,我创建了一个简单的项目来说明问题,并尝试应用doctorlove给出的提示。但是仍然会出现F错误的多重定义。我应该改变什么?项目文件:
A.H:
#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);
}
B.h:
#ifndef B_H_INCLUDED
#define B_H_INCLUDED
int F(int x);
#endif // B_H_INCLUDED
B.c:
#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);
}
我们现在可能正在解决错误的问题。为什么你将两个头文件包含在同一个源文件中?你不能只包括你需要的东西吗? – doctorlove
我正在使用Umfpack和SuperLU库。在一个程序中,我需要两个解算器来执行不同的计算。而且这两个库的功能都很少,命名方式完全一样。 – Misery