2010-10-21 55 views
4

我知道这样做的所有正常的方式返回一个对对象的,我要找的是一个文章,我在很久很久以前读过那展示了如何使用内联汇编写一些疯狂的辅助功能和__naked函数返回一对物品。从功能

我试过不停google搜索它,但无济于事,我希望别人知道我在谈论的文章,​​并有一个链接到它。

+2

的StackOverflow是不是,在一般情况下,搜索服务。这是一个非常本地化的请求,也就是说,你要求的是一篇文章,而不是真正帮助编程,所以我投票决定将其作为本地化版本。 – 2010-10-21 17:53:30

+0

我建议只编辑这个问题,以便它没有特别要求那篇文章,但是提供处理这个问题的任何信息。提供该文章的位置将回答该问题,但其他许多答案也可以。我认为这个问题没有问题,提到一个长久以来被遗忘的半文章可能已经解决了这个问题。 – nategoose 2010-10-21 18:25:44

+0

是的,这不是A/B问题。我知道我在问什么,搜索没有发现任何东西。如果你可以提出更好的建议,请随意。 – ReaperUnreal 2010-11-01 16:55:10

回答

11

没有必要

struct PairOfItems {int item1;double item2;}; 
struct PairOfItems crazyhelperfunction(void){ 
    struct PairOfItems x = {42, -0.42}; 
    return x; 
} 

组装我不知道有关的文章。

+0

提供的规格很好的实现。 :-) – 2010-10-21 17:25:37

+1

+1为'crazyhelperfunction'。 – JoshD 2010-10-21 17:29:18

+1

我认为这是正常的做法之一! – 2010-10-21 17:34:53

-1

__naked,我知道的是

#define __naked __attribute__((naked)) 

这是记录here一个GCC属性。

它不支持所有的目标。不过,做一个google code search会带来一些用途。

,它是作为一个宏做的原因是,这样它可以为不支持它,如果头正在与其他一些编译器所使用的目标被定义为空。

我记得(我想)看到的这一些例子为师,并调制(divmod)功能avr_gcc头。这返回一个结构,它既有返回值,又将整个事物存储在寄存器中,而不是堆栈中。

我不知道__naked与返回寄存器(而不是堆栈中)结果的两部分(它们在结构中)有什么关系,但它确实允许内联函数完全由一个辅助函数调用组成。