2012-05-14 6 views
1

В C выбор компонента, в чем преимущество функции возврата структуры? например:Функция возврата структуры

struct S { 
    int a, b; 
} x; 

Почему я могу назначить выше-структуру в виде функции, как показано ниже, Есть ли польза делать это?

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

Открой мне глаза на этих ребят.

+1

Непонятно, что вы спрашиваете здесь ... –

+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 (это, как правило, делается в файле заголовка), так, чтобы другие функции знать его прототип т.е. его параметров и тип возвращаемого значения, даже если сама функция определена в другом файле.

Смежные вопросы