(谢谢@Ruslan)
因此,其目的实际上是隐藏带有此宏标记的函数,使其不出现在动态库中(“从ABI隐藏”)。过去,通过仅使它们内联来完成此操作,但是现在使用了clang属性string symbol = MapSymbol("EURUSDu"); // pass string and get output
Console.WriteLine($"Symbol is {symbol}"); // output
public static string MapSymbol(string symbol)
{
try
{
symbol = symbol.Trim();
string symbolReturn = "";
List<string> symbolList = new List<string>() { "AUDCADu","AUDJPYu","AUDNZDu","AUDUSDf","AUDUSDu","CADJPYu","EURAUDu","EURCADu","EURCHFu","EURGBPu","EURJPYu","EURNZDu","EURUSDf","EURUSDu","GBPAUDu","GBPCADu","GBPCHFu","GBPJPYu","GBPNZDu","GBPUSDf","GBPUSDu","GER30u","HK50u","JPN225u","NAS100u","NZDCADu","NZDUSDf","NZDUSDu","SPX500u","UK100u","UKOILu","US30u","USDCADf","USDCADu","USDCHFf","USDCHFu","USDJPYf","USDJPYu","USDXu","USOILu","XAGUSDf","XAGUSDfv","XAGUSDu","XAUUSDf","XAUUSDfv","XAUUSDu","XINA50u" };
foreach (var item in symbolList)
{
if (item == symbol)
{
symbolReturn = item; break;
}
else if (item == symbol.Substring(0,Math.Min(symbol.Length,6)))
{
symbolReturn = item; break;
}
else if (item.Substring(0,Math.Min(item.Length,6)) == symbol)
{
symbolReturn = item; break;
}
else if (item.Substring(0,6)) == symbol.Substring(0,6)))
{
symbolReturn = item; break;
}
else
{
symbolReturn = null;
}
}
return symbolReturn;
}
catch (Exception ex)
{
Console.WriteLine($"Exception in maping symbol,{ex.Message}");
return null;
}
}
;这就是attribute((internal_linkage))
的定义。至于内联的隐身宏_LIBCPP_HIDE_FROM_ABI
-它已被重新定义为其名称应具有的名称。
本文链接:https://www.f2er.com/2927112.html