2017-02-28 5 views
-1

2つの要素を持つ構造体を作成し、main関数外の構造体要素の1つに値を代入しようとしました。コンパイル中にエラーが出ます。構造体の外側に値を代入する

#include <stdio.h> 
#include <stdlib.h> 
struct node{ 
    char a; 
    int b; 
}; 
struct node sr; 
sr.b = 48; 
int main(){ 
    printf("Value:%d",sr.b); 
    return 0; 
} 

私は宣言の後に値を割り当てています。なぜこのコードはエラーを出すのですか?あなたはファイルスコープでmain()、すなわち外部のランタイム実行を、必要とする声明を持つことができません

エラーメッセージ

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
+2

機能の外に割り当てを行うことはできません。実行可能コードは、関数内にのみ存在できます。 –

+2

'struct node sr = {.b = 48};のようなイニシャライザとして割り当てます。 – BLUEPIXY

答えて

3

。が実行されるときには、を決定する関数の中にあるブロックスコープの内部に存在する必要があります。

しかし、initializationを使用して、構造体型変数のメンバーに格納されている初期値を持つことができます。

struct node sr = {'Z', 1}; 

のようなものが1'Z'sr.bからsr.aを初期化します。場合にはあなたが唯一のメンバーbを初期化することに興味が、あなたはdesignated initializersを必要とするだろう、

struct node sr = { .b = 1 }; 
0

のようにmain()関数内の次の行を入れてください。

struct node sr; 
sr.b = 48; 

なぜですか?ランタイム実行が必要な文をmain()の外に置くことはできません。ブロックの範囲内にある必要があります。たとえば、実行するタイミングを決定するために関数内にある必要があります。

+0

これは当てはまりますが、OPは既にこれを知っているでしょう。 –

+1

この質問は、単に働くコードではなく、*説明*を探しています。あなたの答えは質問者のための洞察を提供せず、削除されるかもしれません。観察された症状の原因を説明するために[編集]してください。 –

関連する問題