C++ PFYvv代表什么?(不是PFvv!)
我正在尝试将符号的文件与标题中已损坏的生成文件链接。 (将ROM定位功能与RAM功能相匹配。) 在.sym中,我有一个带有“PFvv”参数的函数, 通常要求->作废(fn*)(作废) 编译器将生成以下输出作为参数:PFYvv 结果:链接器未链接 问题: Y代表什么? 有手臂损伤的参考文件吗 .sym损坏的名称:C++ PFYvv代表什么?(不是PFvv!),c++,arm,name-mangling,armcc,C++,Arm,Name Mangling,Armcc,我正在尝试将符号的文件与标题中已损坏的生成文件链接。 (将ROM定位功能与RAM功能相匹配。) 在.sym中,我有一个带有“PFvv”参数的函数, 通常要求->作废(fn*)(作废) 编译器将生成以下输出作为参数:PFYvv 结果:链接器未链接 问题: Y代表什么? 有手臂损伤的参考文件吗 .sym损坏的名称: _ZN10CCasd15lolEP13strPcPFvvEhPvm 编译器生成的名称: _ZN10CCasd15lolEP13strPcPFYvvEhPvm .h定义 class C
_ZN10CCasd15lolEP13strPcPFvvEhPvm
编译器生成的名称:
_ZN10CCasd15lolEP13strPcPFYvvEhPvm
.h定义
class CCasd{
static int lol(in_str*h, char* name, void(*fn)(void), unsigned char p, void *s, unsigned long l);
};
应答后代码:
以下是生成PFvv和PFYvv损坏名称的方法:
#ifdef __cplusplus
extern "C" { /* C declarations in C++ */
#endif
class CCASD {
public:
static int lol(in_str*h, char* name, void(*fn)(void), unsigned char p, void *s, unsigned long l);//Will be PFYvv
};
#ifdef __cplusplus
} /* End of C declarations */
#endif
class CCASD {
public:
static int lol(in_str*h, char* name, void(*fn)(void), unsigned char p, void *s, unsigned long l);//Will be PFvv
};
显然,(在链接文档中列举了一些修改)
因此,我们开始……并发现您的“函数指针”类型,并给出以下解释:
裸函数类型的“Y”前缀在实现中编码外部“C”,这些实现区分具有“C”和“C++”语言链接的函数类型。这只会影响类型混乱,因为外部“C”函数对象具有未混合的名称
至于您是否有这些实现中的一个(我的意思是一般来说,您的实现显然是其中之一),值得一读。显然,(在链接文档中列举了一些修改)
因此,我们开始……并发现您的“函数指针”类型,并给出以下解释:
裸函数类型的“Y”前缀在实现中编码外部“C”,这些实现区分具有“C”和“C++”语言链接的函数类型。这只会影响类型混乱,因为外部“C”函数对象具有未混合的名称
至于您是否有这些实现之一(我的意思是,一般来说,您的实现显然是其中之一),值得一读。谢谢,您让它看起来很简单,但对损坏知之甚少,这很难搜索!)另外,在问题中添加一段代码来生成两种情况,这将有助于两种可能的声明之间的实际示例差异@康斯:不客气。我唯一要找的就是“手臂ABI”。。其余的人只是阅读和跟踪线索。人们过于依赖“搜索”而无法直接找到答案;我真的认为他们应该多学习!通过我的过程,我希望向大家展示这一点的价值。也。。。我将你链接到的问题中有一个例子,建议阅读;)我已经为你所写的东西做好了准备,虽然我是一个嵌入式C工程师,但我从来没有这么仔细地看C++的。我一开始就不会搜索“手臂ABI”:D!再次感谢:)谢谢,你让它看起来很简单,但对弄乱不太了解,搜索起来很困难!:)另外,在问题中添加一段代码来生成两种情况,这将有助于两种可能的声明之间的实际示例差异@康斯:不客气。我唯一要找的就是“手臂ABI”。。其余的人只是阅读和跟踪线索。人们过于依赖“搜索”而无法直接找到答案;我真的认为他们应该多学习!通过我的过程,我希望向大家展示这一点的价值。也。。。我将你链接到的问题中有一个例子,建议阅读;)我已经为你所写的东西做好了准备,虽然我是一个嵌入式C工程师,但我从来没有这么仔细地看C++的。我一开始就不会搜索“手臂ABI”:D!再次感谢:)