我有一個包含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