首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用带有名称空间的函数的杂注弱?

如何使用带有名称空间的函数的杂注弱?
EN

Stack Overflow用户
提问于 2013-01-21 16:46:33
回答 1查看 563关注 0票数 1

这样做是可行的:

test1.h

代码语言:javascript
复制
namespace funcs {
  extern "C" {
    void a();
    void b();
    void c();
  }
}

test1.cpp

代码语言:javascript
复制
namespace funcs {
  void (*all[])() = {a, b, c};
}
extern "C" void hang() {
  while (true);
}

#pragma weak a = hang
#pragma weak b = hang
#pragma weak c = hang

但这并不是:

test1.h

代码语言:javascript
复制
namespace funcs {
    void a();
    void b();
    void c();
}

test1.cpp

代码语言:javascript
复制
namespace funcs {
  void (*all[])() = {a, b, c};
}
void hang() {
  while (true);
}

#pragma weak funcs::a = hang
#pragma weak funcs::b = hang
#pragma weak funcs::c = hang

我认为这是因为#pragma weak需要破烂的名字。有没有办法让编译器(GCC 4.7.3)为我发出破损的名字?

EN

回答 1

Stack Overflow用户

发布于 2013-01-22 06:17:33

在g++中没有稳定的分解方法,原因是,即使在不同的g++版本之间,故障规则也是不可移植的。

另外,#pragma weak是C扩展名(在gcc/c-family/c-pragma.c文件中声明),通常不使用C++

就GCC的发展而言,正确的解决方案是为类似于#pragma cpp-weak的东西提供代码,并将其提交gcc,但这似乎是一项相当复杂的任务。你可以在GCC提出一个改进的要求,布奇拉,也许有人会帮忙。

您还可能希望自己为C++函数声明汇编程序标签,并对它们进行弱引用,例如:

代码语言:javascript
复制
namespace funcs {
    void a()  __asm__("mya");
    void b()  __asm__("myb");
    void c()  __asm__("myc");
}

namespace funcs {
  void (*all[])() = {a, b, c};
}

extern void hang() __asm__("myhang");
void hang() {
  while (true);
}

#pragma weak mya = myhang
#pragma weak myb = myhang
#pragma weak myc = myhang

但我不确定,这对你更好,然后是“外C”规范。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14443336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档