从函数返回结构的更好方法是什么?

which is better way to returning structure from function?

有多种方法可以从函数 return 结构,例如 return 整个结构或 return 仅指针。 returning 指针有助于避免堆栈开销,因为我们不需要 return 整个结构。在另一边 小结构最好与 returning 整个结构一起使用。

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

哪种方法更好?有什么问题吗?或者对新方法有什么建议吗?

return将大型结构作为一个整体会导致堆栈问题吗?

file1.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;
}

file2.c

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

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

}

经验法则是始终通过指针而不是通过值将结构传递给函数,原因您自己也提到过。你应该只在结构非常小的情况下对这条规则进行特殊情况例外。

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


与您的问题无关的小问题:永远不要在 C 中将函数写成 void myFunction(),这是过时的风格。请改用 void myFunction(void)