2012-05-14 86 views
1

C元件选择,结构返回函数有什么好处?例如:结构返回函数

struct S { 
    int a, b; 
} x; 

为什么我可以将上述结构作为函数赋值,如下所示,这样做有什么好处吗?

extern struct S f(); /* Why is this neccesary? */ 
x = f(); /* Is this accurate */ 

打开我的眼睛在这个家伙。

+1

目前还不清楚您在此处询问... – 2012-05-14 19:08:48

+0

下面是一个类似的问题,用于定义函数的签名,该函数将返回多个变量。 http://stackoverflow.com/a/8999520/143897 –

回答

2

这只是一个函数,发生返回struct。没有比这更多的东西了。看到一个函数返回一个int,你不会感到惊讶,为什么当一个函数返回一个结构时会感到惊讶?

另外,extern在这里是多余的,因为这是函数的默认存储类。

0

如果你得到一个结构的拷贝而不是指向它的指针,你知道你不必担心它,或者是否有任何数据竞争,一个线程正在写入结构,而另一个读取或者该函数返回的指针是否会被一些可能无法控制的操作无效化。

2

它很有用,因此您可以从函数返回多个值。

例如,你可以使用它像这样

struct Point { 
    int x; 
    int y; 
}; 

struct Point getMousePos() 
{ 
    struct Point pos; 
    pos.x = 567; 
    pos.y = 343; 
    return pos; 
} 

int main() 
{ 
    struct Point mouse_pos = getMousePos(); 
    printf("Mousepos %d,%d\n", mouse_pos.x, mouse_pos.y"); 
} 

该功能可与extern向前声明(这通常在头文件来完成),让其他功能知道它的原型即它的参数和返回类型,即使函数本身是在另一个文件中定义的。