我可以给c++函数一个自定义的符号名称吗?



我想给一个c++函数一个自定义的符号名(没有混淆),这样就可以直接从c调用它而不需要重定向。例如:如果我在c++中有以下类:

class Foo {
public:
Foo();
void some_method(int);
int a_;
};

我想给Foo::some_method一个自定义名称,如Foo_some_method,这样我就可以直接从c代码调用它,而不需要从extern "C"内部的另一个函数重定向,这是可能的吗?

不,要启用与C兼容的调用约定和符号名称,您需要生成一个extern "C"正常函数(理论上,一个外部的';C";函数指针也可以工作)。

所以写你的胶水代码。

这是合理的反思,你将能够自动化。但这还没有标准化,covid - 19可能会将其推迟到2023年以后。

我用g++和gcc测试了这个,它工作了!我使用asm标签给符号一个自定义的名称。

product.h

#ifndef BCC702_PRODUTO_H
#define BCC702_PRODUTO_H
#include <string>
#include <ostream>

class product {
public:
/// Create product
product(int id, double price, char* name);
/// Print product
void print() asm("Asm_product_print");
void set_name(char* name) asm("Asm_product_set_name") ;
private:
int id_;
double price_;
char* name_;
};
#endif //BCC702_PRODUTO_H

使用g++编译product.cpp为对象

#include "product.h"
#include <iostream>
void product::print() {
std::cout << name_ << std::endl;
}
product::product(int id_, double price_, char* _name_) :
id_(id_), price_(price_), name_(_name_) {}
void product::set_name (char* _name_) {
product::name_ = _name_;
}

gcc编译的main.c

typedef struct{
int id_;
double price_;
char* name_;
}  product;
void Asm_product_set_name(product* p, char* string);
void Asm_product_print(product* p);
char* example = "hello world!";
int main(){
product p;
Asm_product_set_name(&p, example);
Asm_product_print(&p);
return 0;
}

最后,使用g++链接对象。测试结果为:Hello world!但是,我不确定它是否能与其他c++编译器一起工作。

相关内容

  • 没有找到相关文章

最新更新