5

IDE(Netbeans)で次のような構造体を宣言しています。

struct foo { size_t var = 1; }

そしてIDEはその合法性を言います。私はプロジェクト(静的ライブラリ..)をコンパイルし、コンパイラーはその合法性を示します(うめき声やスローはしません)。

この時点で構文をテストしているだけなので、次のような手順でこのタグの構造体を宣言するときに、これが実際に機能するかどうかを知っている人に尋ねる必要があります。

struct foo myfoo;

だから問題は:それは有効なイニシャライザーですか?(size_t var = 1)またはコンパイラはここで私のエゴを撫でているだけですか?私はグーグルやこのようなドキュメントで何も見つけていないので、私はそれが私が望むように機能しないと推測しています。

* edit So me and the Good'ol boys here @SOは、デバッグ構成ではコンパイルされますが、リリース構成ではコンパイルされないことを理解しました。1つの頭が数千よりも優れていると誰が言いますか?:D

4

2 に答える 2

4

許されないと思います。構造体ではなく、変数の値を指定する必要があります。

struct foo { size_t var; };

struct foo myfoo = { 1 };

それを可能にするIDEに関しては、明らかな可能性は、コードが実際には少し異なっていることです。

struct foo { static const size_t var = 1; }

...そしてIDEはそれをCではなくC++としてコンパイルしています。

于 2012-04-24T18:58:04.583 に答える
1

簡単な答えは次のとおりです。構造体定義内で初期化することはできないため、コンパイラーがそれを許可している場合は、何か奇妙なことが起こっています。

初期化するには、その構造体をvar(または、目的の場合はオブジェクト)でインスタンス化し、そのvarを初期化する必要があります。

だから、あなたの構造体のために:

struct foo {
    size_t var = 1;
}


次のように開始します。

type function_name(...params...) {
    struct foo myFooVar;
    myFooVar.var = 1;
    ....
    return <type>;
}
于 2012-04-24T19:13:03.247 に答える