从函数返回一对项目

时间:2010-10-21 17:10:12

标签: c assembly

我知道所有正常的方法,我正在寻找的是我很久以前读过的一篇文章,它展示了如何使用内联汇编和__naked函数来编写一些疯狂的辅助函数来返回一对项目

我已经无休止地谷歌搜索它,但无济于事,我希望别人知道我正在谈论的文章,​​并有一个链接。

2 个答案:

答案 0 :(得分:11)

无需装配

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

我不知道这篇文章。

答案 1 :(得分:-1)

我所知道的__naked

#define __naked __attribute__((naked))

哪个是记录在here的GCC属性。

并非所有目标都支持。但是,执行google code search会出现一些用途。

它作为宏完成的原因是,对于不支持它的目标,或者如果标题与其他编译器一起使用,它可以被定义为空。

我确实记得(我认为)看到avr_gcc标题的除法和调制(divmod)函数的一些例子。这返回了一个结构,该结构中包含两个返回值,但是将整个内容存储在寄存器而不是堆栈中。

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