2010-12-30 4 views
0

私はC89、C90、Ansi-Cコードを書いています。私の関数の1つは、構造体をパラメータとして必要とします。私はその構造体の初期化を使って関数を呼び出すのではなく、構造体を作成してそれを関数に渡します。構造体の初期化は、関数呼び出しでどのように変数として使用できますか。 ANSI-C Version

ここにいくつかのスニペットがあります。

typedef struct { 
    char* EventName; 
    char* Message; 
} Event; 

Event myEvent = { 
    .EventName = "infomessage", 
    .Message = "Testmessage" 
}; 

Notify(myEvent);   

、ここで私が書きたいものですが、ウィッヒdoesntの仕事

Notify({.EventName = "infomessage", .Message = "Testmessage"}); 

またはより良い

Notify({"infomessage", "Testmessage"}); 

EDIT:1990標準:LabCVIは、ISO 9899を使用しています。

+1

(Event){"infomessage", "Testmessage"}複合リテラルを使用します。彼らはANSI-C、ウィッヒはISO-C90と同等であると言うとき、ほとんどの人がANSI-C89を意味します。同様に、ISO-C99はANSI-C2000と同等です。 C99をANSI-Cと呼んでいる唯一の場所はここにあります。 – Christoph

+0

ああ、初心者のミスかもしれませんが、私が読んだ「現代の」Ansi-Cの本はすべてC99を参照しています。ドイツ語なので多分地域のことです。私が使用しているIDEはLabCVI 2010です。++演算子と構造体のコンポーネントの初期化を理解しているのでC99と思っています。 – Johannes

答えて

2

ところですなわち

Notify((Event){"infomessage", "Testmessage"}); 
+0

同じエラー - 不正な式が生成されます。 – Johannes

+1

@Johannes:http://zone.ni.com/devzone/cda/tut/p/id/8764によると、LabWindows/CVIは複合リテラルをサポートしていません。また、ANSI C99という用語も使用しています。 – Christoph

+0

Interesting - C99は複合リテラルをサポートしていますが、LabCVIヘルプは複合リテラルをサポートしていないC90標準のみを指します。だから答えはC99以上では正しいですが、それより下のものはすべて不可能です。 – Johannes

関連する問題