如果我有一个像有谁知道如何在Visual C++中手动调整名称?
void foo(int c, char v);
...在我的obj的.C功能,这成为了一个名为
_foo
符号......为的每个C名字改编规则。如果我在.cpp文件中具有类似的功能,则根据特定于编译器的名称修改规则,这完全变成了其他内容。 MSVC 12会给我们这样的:
[email protected]@[email protected]
如果我在.cpp文件函数foo,我希望它用C名字改编规则(假设没有超载我能做到),我们可以把它声明为
extern "C" void foo(int c, char v);
...在这种情况下,我们又回到了美好的旧
_foo
...在.OBJ符号表。
我的问题是,是否有可能走相反的路?如果我想用C函数来模拟C++名字变形,使用gcc会很容易,因为gcc的名字变形规则只使用了标识符友好的字符,因此foo的变形名称变为_ZN3fooEic,我们可以很容易地编写
void ZN3fooEic(int c, char v);
早在微软编译土地,我显然不能创建一个名称是叫
void [email protected]@[email protected](int c, char v);
完全无效的标识符的功能......但我还是喜欢那个函数来显示.obj符号表中的那个符号名称。
任何想法?我查看了Visual C++支持的编译指示,我没有看到任何有用的东西。
@mustafagonul我不是要还原函数 - 我试图裂伤。 –
即使你可以这样做,你也必须以某种方式匹配ABI。你在这个树上吠叫错了树。使用extern“C”来接受这个限制。 – xaxxon
@mustafagonul你不完全理解这一点。我知道这个破烂不堪的名字是什么。我想在C文件中伪造C++名称。 –