首页 > 解决方案 > 从函数返回结构的更好方法是什么?

问题描述

有多种方法可以从函数返回结构,例如返回整个结构或仅返回指针。返回指针对于避免堆栈开销很有用,因为我们不需要返回整个结构。另一方面,对于小型结构,最好返回整个结构。

在我的情况下,我有以下场景从另一个文件中获取结构并考虑了各种使用方法,但由于我是 C 新手,所以我仍然需要一些专家建议,比如

哪种方法更好?里面有什么问题吗?或对新方法的任何建议?

整体返回大型结构会导致任何堆栈问题吗?

文件1.c

static struct_type mysruct; //Note : here struct size is 250+ bytes

//Method 1
struct_type getStructDataMethod1()
{
    return mysruct;
}

//Method 2
void getStructDataMethod2(struct_type *structPtr)
{
    if(structPtr != NULL)
    {
        memcpy(structPtr, &mysruct, sizeof(struct_type));
    }
}
//Method 3
void getStructDataMethod3(struct_type *structPtr)
{
    *structPtr = mysruct;
}

文件2.c

void myFunction()
{
    struct_type mylocalStruct1 = getStructDataMethod1();
    struct_type mylocalStruct2;
    struct_type mylocalStruct3;

    getStructDataMethod2(&mylocalStruct2);
    getStructDataMethod3(&mylocalStruct3);

}

标签: cstructurereturn-value

解决方案


由于您提到自己的原因,经验法则是始终通过指针而不是通过值将结构传递给函数。如果结构非常小,您应该只对此规则进行特殊情况例外处理。

所以方法2或3都是正确的方法。除了 NULL 指针检查之外,它们是等价的。


与您的问题无关的小问题:永远不要像void myFunction()在 C 中那样编写函数,这是过时的风格。改为使用void myFunction(void)


推荐阅读