如何强制编译器将C名称更改为C++;名字 我有.Objo,它具有所有需要作为C++成员函数链接的函数。问题是,它是C语言的,因此使用它的类需要比它的普通名称更难看的东西。因此,我认为这只能通过两种方式来实现:要么破坏C函数的名称,要么在符号表中添加额外的符号,反正该符号表会有被破坏的名称,但我仍然可以使用它的原始名称。。所以基本上把名字弄乱了。有什么办法可以做到这一点,或者有其他完全不同的解决方法吗?请分享,但请考虑在这个特殊情况下说Extn“C”的有用性:)THX< P>你的(基于C)的对象文件有一个符号,你不能重新定义那个符号有不同的名字——这将是编译器生成该对象文件的任务。C编译器不知道C++,不能用C++链接和名称修改来发出符号。因此,使用该符号(您的C函数)的唯一方法是使用已知的符号调用它 当然,可以使用该函数实现C++(成员)函数(间接的级别被优化掉了如果< < /强>调用>代码>内联< /代码>),如 如果C++类已经声明,并且其声明不能被触摸,那么您仍然可以以相同的方式在单独的源文件中实现成员函数。但是,这不能是内联的,因此需要额外的函数调用: in file.cpp: extern "C" { int my_C_func(void*, int); } // could be in an included header int A::operator()(int i) { return my_C_func(this,i); }

如何强制编译器将C名称更改为C++;名字 我有.Objo,它具有所有需要作为C++成员函数链接的函数。问题是,它是C语言的,因此使用它的类需要比它的普通名称更难看的东西。因此,我认为这只能通过两种方式来实现:要么破坏C函数的名称,要么在符号表中添加额外的符号,反正该符号表会有被破坏的名称,但我仍然可以使用它的原始名称。。所以基本上把名字弄乱了。有什么办法可以做到这一点,或者有其他完全不同的解决方法吗?请分享,但请考虑在这个特殊情况下说Extn“C”的有用性:)THX< P>你的(基于C)的对象文件有一个符号,你不能重新定义那个符号有不同的名字——这将是编译器生成该对象文件的任务。C编译器不知道C++,不能用C++链接和名称修改来发出符号。因此,使用该符号(您的C函数)的唯一方法是使用已知的符号调用它 当然,可以使用该函数实现C++(成员)函数(间接的级别被优化掉了如果< < /强>调用>代码>内联< /代码>),如 如果C++类已经声明,并且其声明不能被触摸,那么您仍然可以以相同的方式在单独的源文件中实现成员函数。但是,这不能是内联的,因此需要额外的函数调用: in file.cpp: extern "C" { int my_C_func(void*, int); } // could be in an included header int A::operator()(int i) { return my_C_func(this,i); },c++,c,windows,symbols,name-mangling,C++,C,Windows,Symbols,Name Mangling,从您对我的评论的回复中,我得出结论,您实际上可以控制C函数的实现。那么,为什么需要在C中实现这一点呢?为什么不能简单地在C++中实现它呢?然后,您将得到正确的链接和名称,并且可以直接实现所需的成员函数。< /p>一个C函数,它具有所有需要作为C++成员函数链接的函数。真的,包括这个指针?这怎么可能?AFAIK C不知道这一点。因为我将它指定为第一个参数。你不是在问真正的问题。有一个理由,把C++作为C。通常情况下,你会做相反的事情,写C++类并用C接口包起来,当这个< /C> >作为每个代码中的

从您对我的评论的回复中,我得出结论,您实际上可以控制C函数的实现。那么,为什么需要在C中实现这一点呢?为什么不能简单地在C++中实现它呢?然后,您将得到正确的链接和名称,并且可以直接实现所需的成员函数。< /p>一个C函数,它具有所有需要作为C++成员函数链接的函数。真的,包括这个指针?这怎么可能?AFAIK C不知道这一点。因为我将它指定为第一个参数。你不是在问真正的问题。有一个理由,把C++作为C。通常情况下,你会做相反的事情,写C++类并用C接口包起来,当<代码>这个< /C> >作为每个代码中的第一个参数添加到 Vult*/Cube >。你可以手动地手动修改名字,把被损坏的名字放在C代码中,但是我不知道为什么你不只是使用C++编译器?
in file.cpp:

extern "C" { int my_C_func(void*, int); }  // could be in an included header
int A::operator()(int i) { return my_C_func(this,i); }