如何从C调用一个名称 - 错位符号?

module.name:version

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

我希望能够用写在我的语言C中的函数调用约定是差不多的codepaths。它只是我必须在版本和我导出符号内的模块路径裂伤,我有相同的标识符约定C具有,因此我不能只用下划线

有帮助吗?

解决方案

IIUC,您要定义自己的语言,并正在寻找一个合适的名字改编的算法。

您可能需要使用英特尔等人安腾名称重整算法,其用于由g ++上的所有平台。对于特定的情况下,你可能会裂伤每个名字仿佛C ++的申报

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

这将作为裂伤

_ZN6module4name4V1_08functionEi

由于所有的符号使用的算法,它们不能相互冲突。他们也不能叫_ZN6module4name4V1_08functionEi一个标准的C函数相冲突,如开始_Z(或_UPPERCASE)的名称均保留为(c)项的执行情况。如果从G ++要方便可召集,你可以使用这个精确的约定;否则你选择从ž不同的信。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top