C标识符限制

时间:2008-12-15 10:57:25

标签: c dynamic-linking

如何从C调用名称错位的符号?

module.name:version

void* function(TypeSig); // Type of the function

我希望能够在C语言中使用我的语言编写的代码路径。函数调用约定大致相同。只是我必须在我导出的符号中的版本和模块路径中进行修改,并且我具有与C相同的标识符约定,因此我不能只使用下划线。

1 个答案:

答案 0 :(得分:2)

IIUC,您正在定义自己的语言,并且正在寻找合适的名称修改算法。

您可能想要使用英特尔等。 Itanium name mangling algorithm,g ++在所有平台上使用。对于特定情况,您可能会破坏每个名称,就好像C ++声明是

一样
namespace module{ namespace name { namespace Vversion /*e.g. V1_0 */ {
  void *function(int){}
}}}

将会破坏为

_ZN6module4name4V1_08functionEi

由于您的所有符号都使用该算法,因此它们不会相互冲突。它们也不能与名为_ZN6module4name4V1_08functionEi的标准C函数冲突,因为所有以_Z(或_UPPERCASE)开头的名称都保留用于实现(C)。如果你想从g ++中获得方便的可调用性,你可以使用这个精确的约定;否则你会选择一个与Z不同的字母。