C标识符限制

C标识符限制,c,dynamic-linking,C,Dynamic Linking,如何从C中调用名称损坏的符号 module.name:version void* function(TypeSig); // Type of the function 我希望能够使用C语言编写的代码路径。函数调用约定大致相同。只是我必须在我导出的符号中修改版本和模块路径,并且我与C具有相同的标识符约定,因此我不能只使用下划线。IIUC,您正在定义自己的语言,并且正在寻找合适的名称修改算法 您可能需要使用Intel等人的,g++在所有平台上都使用它。对于特定的情况,您可能会将每个名称都拼凑起来

如何从C中调用名称损坏的符号

module.name:version

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

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

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

您可能需要使用Intel等人的,g++在所有平台上都使用它。对于特定的情况,您可能会将每个名称都拼凑起来,就像C++声明是

一样。
namespace module{ namespace name { namespace Vversion /*e.g. V1_0 */ {
  void *function(int){}
}}}
哪一个会像

_ZN6module4name4V1_08functionEi

由于所有符号都使用该算法,因此它们不会相互冲突。它们也不能与名为
\u ZN6module4name4V1\u 08functionEi
的标准C函数冲突,因为所有以_Z(或,_大写)开头的名称都是为(C的)实现保留的。如果您想要方便地从g++调用,可以使用这个确切的约定;否则,您将选择一个不同于Z的字母。

模块。名称:版本似乎不是C。您可以重新标记它吗?标识符的类型很无趣(因为它总是相同的)。因此,这样做更干净:W6module4nameV1。不管怎样,谢谢你把这个展示出来。由于后期链接过程,只有
void*fn(TypeSig)
-函数。