一部の構造体メンバーにデフォルト値を設定することは可能ですか?私は次のことを試しましたが、構文エラーが発生します:
typedef struct
{
int flag = 3;
} MyStruct;
エラー:
$ gcc -o testIt test.c
test.c:7: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
test.c: In function ‘main’:
test.c:17: error: ‘struct <anonymous>’ has no member named ‘flag’
構造はデータ型です。データ型に値を与えません。データ型のインスタンス/オブジェクトに値を与えます。
だから、これはCでは不可能です。
代わりに、構造体インスタンスの初期化を行う関数を作成できます。
または、次のこともできます。
struct MyStruct_s
{
int id;
} MyStruct_default = {3};
typedef struct MyStruct_s MyStruct;
そして、常に新しいインスタンスを次のように初期化します。
MyStruct mInstance = MyStruct_default;
Cで構造を定義するときに初期化できないことにも同意します。しかし、以下に示すインスタンスの作成時に構造を初期化できます。
Cでは、
struct s {
int i;
int j;
};
struct s s_instance = { 10 ,20 };
c ++では、以下に示す構造の定義に直接的な価値を与えることができます。
struct s {
int i;
s(): i(10)
{
}
};
他の回答で言及されているように、デフォルトの構造体を作成します。
struct MyStruct
{
int flag;
}
MyStruct_default = {3};
ただし、上記のコードはヘッダーファイルでは機能しません。エラーが発生します:multiple definition of 'MyStruct_default'
。この問題を解決するには、代わりにヘッダーファイルでextern
を使用します。
struct MyStruct
{
int flag;
};
extern const struct MyStruct MyStruct_default;
そして、c
ファイルで:
const struct MyStruct MyStruct_default = {3};
これがヘッダーファイルに問題がある人の助けになることを願っています。
次のように、いくつかの関数を使用して構造体を初期化できます。
typedef struct
{
int flag;
} MyStruct;
MyStruct GetMyStruct(int value)
{
MyStruct My = {0};
My.flag = value;
return My;
}
void main (void)
{
MyStruct temp;
temp = GetMyStruct(3);
printf("%d\n", temp.flag);
}
編集:
typedef struct
{
int flag;
} MyStruct;
MyStruct MyData[20];
MyStruct GetMyStruct(int value)
{
MyStruct My = {0};
My.flag = value;
return My;
}
void main (void)
{
int i;
for (i = 0; i < 20; i ++)
MyData[i] = GetMyStruct(3);
for (i = 0; i < 20; i ++)
printf("%d\n", MyData[i].flag);
}
構造体の初期化関数は、デフォルト値を付与する良い方法です。
Mystruct s;
Mystruct_init(&s);
またはさらに短く:
Mystruct s = Mystruct_init(); // this time init returns a struct
デフォルト値への別のアプローチ。構造体と同じ型で初期化関数を作成します。このアプローチは、大きなコードを個別のファイルに分割するときに非常に役立ちます。
struct structType{
int flag;
};
struct structType InitializeMyStruct(){
struct structType structInitialized;
structInitialized.flag = 3;
return(structInitialized);
};
int main(){
struct structType MyStruct = InitializeMyStruct();
};