Возвращаемое значение функции с типом не по умолчанию - PullRequest
0 голосов
/ 05 января 2012

У меня есть функция:

*Foo* create_foo();

, где Foo - это структура со многими полями:

typedef struct foo {
    int progr_num;
    char* size;
    char* account;
    int matric_num;
    int codex_grp;
    char* note;
} Foo;

Каково именно возвращаемое значение этой функции, когда я ее вызываю ??

функция:

Foo create_foo() {
    Foo x;
    ...
    ...
    return x
}

Я знаю, что тип возвращаемого значения - Foo, но если я вызову функцию и захочу проверить возвращаемое значение, какое значение будет правильным ??(например, если функция имеет тип int , возвращаемое значение равно 0 или -1).

Когда я вызываю функцию, что возвращает правильное значение ??

например:

int main() {
    Foo foo_check;
    foo_check = create_foo();
    if(!foo_check)
    return ... **???**
}

Ответы [ 4 ]

1 голос
/ 05 января 2012

Вместо того, чтобы передавать (большую) структуру назад и вперед по стеку, передайте указатель и используйте стек для индикатора состояния.

struct foo { /* ... whatever ... */ };
int fxfoo(struct foo *pfoo) { /* ... whatever ... */ return ALLOK?0:1; }
int main(void) {
    struct foo objfoo;
    if (fxfoo(&objfoo)) /* error */;
}
0 голосов
/ 05 января 2012
struct A{
int x;
char c;
}

Foo create_foo(){
struct A a;
a.x = 5;
a.c = 'd';

return a; // <-- This will be your return value.
}
0 голосов
/ 05 января 2012

Вы используете возвращаемое значение так же, как и любое возвращаемое значение ...

Foo x = create_foo();
if(x.field == y) {...};
0 голосов
/ 05 января 2012

Возвращаемое значение является полным экземпляром структуры Foo. Если вы хотите проверить его значение, вам необходимо присвоить его чему-либо, а затем проверить поле за полем.

...