2017-02-19 3 views
0

의 가정하자 나는 구조를 정의?구조체 배열에서 배열을 초기화하는 방법은 무엇입니까?</p> <pre><code>TStruct Data[3]; </code></pre> <p>가 어떻게 제대로 구조의 배열의 배열을 초기화 할 : 다음</p> <pre><code>typedef struct _TStruct { uint Values[3]; } TStruct; </code></pre> <p>내가 구조체의 배열을 정의로

+0

(가) DUP 인용 [ GCC 53119 버그] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119) 서핑하는 것처럼 보입니다. e '{0}'을 사용할 때 중괄호가 누락되었습니다. 이 질문은 그런 식으로 초기화되지 않는 것으로 보입니다. – jww

답변

2

올바르게 사용하면 다음을 수행 할 필요가 구조체의 배열에 배열을 초기화하려면 :

typedef struct _TStruct { 

    uint Values[3]; 

} TStruct; 

TStruct Data[3] = { 

    {{ 0x86, 0x55, 0x79 }}, {{ 0xaa, 0xbb, 0xcc }}, {{ 0x76, 0x23, 0x24 }} 

}; 

에주의를 값의 모든 그룹 주위 이중 괄호로.

경고 : 괄호의 추가 쌍 (gcc-Wmissing-braces 플래그 -Wall 플래그가 존재하는 경우에만, 정확하게는 "발견"것)을 다음과 GCC 오류가 발생하지 않도록하는 것이 필수적입니다 초기화 주위에없는 괄호를

: 이중 중괄호의

  1. 사용법 {{ }} 레이아웃을 변경하지 않습니다 메모리

  2. 데이터의이 경고는 MS 비주얼 스튜디오 C++ 컴파일러

페이지에 표시되지 않습니다

How to repair warning: missing braces around initializer?

GCC Bug 53319

+0

당신의 질의 응답은 당신이 제공 한 연결된 질의 응답입니다. 왜 그 때 게시합니까? –

+0

@ Jean-FrançoisFabre 구조체의 배열에서 배열을 초기화하는 방법을 보여주는 SO에 대한 질문/대답이 없었습니다. –

+0

C 중괄호를 생략해도 C 표준에 따라 올바르지 않습니다. 추가 브레이싱은 컴파일러 결함을 해결하기 위해 "필수"입니다. –