Devo collegare due librerie, ad esempio A e B. Alcuni file sono comuni in entrambe le librerie. Quindi, dichiaro le funzioni nella libreria A all'interno di un namespace, ad esempio abc. Così, in A e B, una funzione func si presenta come di seguito:C++: funzioni Extern C all'interno di uno spazio dei nomi
[ in A]
namespace abc {
extern "C" void func();
}
[in B]
extern "C" void func();
Mentre la costruzione del progetto, compilatore genera errori che collegano dicendo più definizioni della funzione func. Non è la funzione func in A all'interno del namespace o c'è qualche problema con le funzioni "C" esterne. Se c'è, allora come posso differenziarli entrambi?
Nota, tuttavia, il nome mangling non può essere disattivato per il preprocessore C. In Visual C++ 2010 il valore della macro '__FUNCTION__' rimane l'identificatore pienamente qualificato anche in" extern "C" ', ad es. "il tuo nome". Questo cadrà in piedi quando si chiamano macro in spazi dei nomi che utilizzano macro predefinite come '__FUNCTION__',' __PRETTY_FUNCTION__' o '__func__'. Nel mio caso (esportando gli stub C da una DLL) lo ha fatto ;-) –