2012-05-14 85 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向前聲明(這通常在頭文件來完成),讓其他功能知道它的原型即它的參數和返回類型,即使函數本身是在另一個文件中定義的。