Могу ли я вернуть структуру a из функции, в которой эта структура определена? (c)

#c #function #struct

Вопрос:

Я пытаюсь определить структуру внутри функции и вернуть эту структуру в конце функции, но не могу найти правильный способ сделать это. Например:

 struct Animals test() {
    struct Animals {
         int* age;
         char* name;
    }
    return struct Animals;
}
    
 

Комментарии:

1. Так не работает. Структура должна быть определена в области, где она видна всем функциям, которые ее используют. Если вы пытаетесь создать тип динамически, C этого не делает.

2. Вы также не указываете имя типа в return операторе, это должно быть выражение.

3. Вы можете переместить его и вернуть указатель на созданную структуру. Если вы выделите его статически, он окажется в кадре стека вызова функции и будет недействительным после его возврата.

4. Определения структур не являются переменными, они являются определениями типов. Сначала вы определяете структуру, а затем объявляете переменные этого типа позже.

Ответ №1:

Могу ли я вернуть структуру a из функции, в которой эта структура определена?

Нет.

Я пытаюсь определить структуру внутри функции

Не делай этого. struct Сначала определите.

 struct Animals {
     int age;  // int makes more sense here than `int *`
     char* name;
};
 

Затем верните struct . Значение объекта может быть определено внутри test() , но структура объекта должна быть определена снаружи и до test() .

 struct Animals test(void) {
    //     v------ compound literal  -----------------v
    return (struct Animals){.age = 42, .name = "fred" };
}
 

Будьте осторожны с управлением тем, на что .name указывает участник.