对于大型结构的输出函数参数,有没有一个最佳实践是不应该改变的?返回指针到结构还是返回整个结构?
例如:我在文件A中有一个大数据结构,我将从文件B调用它:(typedef结构在标头中).h
typedef struct
{
int x1;
int x2;
int x3;
int x4;
...
} myStruct;
.c
static myStruct data = {...};
errorType myfunction1(mystruct *outData)
{
*outData = data; //copy data to output
...
}
errorType myfunction2(mystruct **outData)
{
*outData = &data; //just return pointer to structure
...
}
myfunction1
复制了整个结构,所以如果我经常调用这个函数,堆栈大小会增加,处理时间也会增加,但优点是原始数据不能像myfunction2
那样在这个文件之外更改。
是否有一个最佳实践,两者中的哪一个可以使用?
1条答案
按热度按时间cngwdvgl1#
我将对
myfunction2
中的参数使用const
关键字,以便情况1:编译时,如果参数也是const结构,则调用方使用的结构上的任何更改肯定会生成
error
;用例2:如果调用方的参数不是常量,则至少为
warning
。案例1:
foo.h
foo.c
main.c
在编译时,这给出:
案例2:
如果这个结构基本上不是一个常量:main. c(不带常量的版本)
编译时,此输出: