Aşağıdaki örneği göz önünde bulundurun. fonksiyon ilan edildiği ad gereğince
namespace Gandalf{
namespace Frodo{
bool static hasMyPrecious(){ // _ZN7Gandalf5FrodoL13hasMyPreciousEv
return true;
}
};
bool static hasMyPrecious(){ // _ZN7GandalfL13hasMyPreciousEv
return true;
}
};
namespace Sauron{
bool static hasMyPrecious(){ // _ZN5SauronL13hasMyPreciousEv
return true;
}
};
bool hasMyPrecious(){ // _Z13hasMyPreciousv
return true;
}
int main()
{
if(Gandalf::Frodo::hasMyPrecious() || // _ZN7Gandalf5FrodoL13hasMyPreciousEv
Gandalf::hasMyPrecious() || // _ZN7GandalfL13hasMyPreciousEv
Sauron::hasMyPrecious() || // _ZN5SauronL13hasMyPreciousEv
hasMyPrecious()) // _Z13hasMyPreciousv
return 0;
return 1;
}
, derleyici fonksiyonu tanımlı olduğu ad kapsamı kodlama, işlev adı, dönüş türü ve gerçek parametrelerin başka bir şey değildir Mangled Adı denilen her fonksiyonun benzersiz bir kimlik üretir . Yorumlara bakınız. Bu işlevlere çağrı oluştururken, her işlev çağrısı, Derleyici raporları hatası bulunmadıysa aynı karmaşık imzaya bakar.
Dahili çalışma ile ilgileniyorsanız clang -emit-llvm -S -c main.cpp-o main.ll ile deneme yapmayı deneyin.
Büyük olasılıkla ad bulunamadı ve kod derlenmiyor. Ama belki de bazı örnek kodları yayınla, çünkü detaylar önemlidir. – juanchopanza
İşlev çağrısını, niyetlediğiniz ad alanıyla (örn. Apply :: myfunction() veya orange :: myfunction() – acraig5075