2011-10-18 7 views
10

私は、既知の値を持つ構造体を常に返す関数を持っています。構文は何ですか?複合リテラル構造体を返す方法

struct MyStruct Function(void) 
{ 
    return (struct MyStruct){1,2,3}; 
} 

私は戻りライン上のコンパイラエラーを取得しています:
エラー:構文エラー

任意のアイデア?私は組み込みターゲットにクロスコンパイラを使用しているので、コンパイラになる可能性があります。


編集
それは私のコンパイラです。 cnicutarがコメントしたように、それは有効なC99コードです。

変数を作成できるとの指摘がありました。私の目標は、単にそれを返すための変数の作成を避けることでした。

+8

これはコンパイラです。 C99はこれを完全にサポートしています。 – cnicutar

+0

C++についてはどうですか? (GCC C++?スイッチはありますか?) – imacake

+0

@imacake質問はCについてですが、G ++がデフォルトでサポートしていると思いますか? – YoYoYonnY

答えて

0

明白な方法は、適切な型の変数を作成することです:あなたは構造体としての初期化子をキャストしようとしているよう

struct MyStruct Function(void) { 
    struct MyStruct ret = {1,2,3}; 
    return ret; 
} 
4

これは有効ではありません

:-)ルックス構文。 ような何か試してみてください:

struct MyStruct Function(void) 
{ 
    struct MyStruct s = {1,2,3}; 
    return s; 
} 

をしかし、念のために、宣言されているかを正確にMyStructを示すために良いだろう。

+1

いいえ、OPは複合語のリテラルを返す以外に何もキャストしていません。しかし、これは明らかに遍在していないC99の機能です。 – cnicutar

+0

@cnicutar私はただの冗談だった。私のテキストの上にどのように行を置くことができますか?無効な構文について私が言っている部分を傷つけたい。 C99は私を騙す。 – sidyll

+0

あなたのために編集されました。 – cnicutar