2012-01-05 13 views
0

私が機能を持っている:戻り値は

*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であることを知っているが、私は、関数を呼び出し、正しい値である戻り値を、テストしたい場合は? (たとえば、関数がの場合、タイプの場合、戻り値は0または-1)。

関数を呼び出すと、戻り値は何ですか?例えば

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

あなたの説明によれば、関数は構造体を返します。その戻り値(つまり構造体)を「テストする」ことが何を意味するのかを正確に説明する必要があります。 – NPE

+0

"(関数がint型で、戻り値が0または-1の場合)"とはどういう意味ですか?私はあなたが返品の種類について混乱していると思います。 'int create_int();'で返されるintは、大きな範囲内の任意の正または負の整数です。 –

+0

@Kyrol: 'Foo create_foo();'は関数ではありません。その関数定義。戻り値は関数内で定義されます。たぶん私はあなたの質問を理解していないよ... – Andrew

答えて

1

を使用し、スタックを使用してステータスインジケータを表示します。

struct foo { /* ... whatever ... */ }; 
int fxfoo(struct foo *pfoo) { /* ... whatever ... */ return ALLOK?0:1; } 
int main(void) { 
    struct foo objfoo; 
    if (fxfoo(&objfoo)) /* error */; 
} 
+0

ありがとう!今私は理解している...しかし、私は私の質問に-1を理解していない。 Okは愚かな質問ですが、私は理解したかったのです!しかし、あなたの答えをありがとう! ! – Kyrol

+0

私はあなたの質問をd​​ownvoteしなかった。私はまたdownvotingが説明されるべき意見を持っています:) – pmg

+0

まあ... Ok、私はエラーを理解しています。 struct型の関数ではなく、int型の関数を実行し、structのポインタをパラメータとして渡す必要があります。右? ;) – Kyrol

0

戻り値は、構造Fooの完全なインスタンスです。その値を確認したい場合は、何かに割り当てる必要があり、次にフィールドごとにチェックする必要があります。

0
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

これは問題ありませんが、今は質問をよく編集します。私は最初に最悪のことを説明すると思います。 – Kyrol

0

あなたは、前後に、スタック上の構造体ポインタを渡す(大)を渡すのではなく、戻り値は、任意の戻り値を使用するのと同じ方法...

Foo x = create_foo(); 
if(x.field == y) {...};