2010-06-08 3 views
0

실제 패킷 페이로드에 대해 배열 [0] (여기, char iedata[0])로 끝나는 구조를 초기화하려고합니다. 나는 다음과 같이 인라인을 초기화하려고하면 :배열 초기화 경고

struct some_packet pkt = { 
    .elem1 = blah, .elem2 = bleh, 
    .iedata = { 
     1, 2, 3, 4 
    } 
}; 

나는 GCC에서 경고를 얻을 :

warning: (near initialization for ‘pkt.iedata’) 

이 적절한 초기화임을 표시하는 좋은 방법이 있나요?

답변

1

당신은 C99 모드에서 컴파일 할 수 있다면, 당신은 표준 유연한 길이 배열보다는 길이가 0 인 해킹 사용하여 시도 할 수 : http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html

참고 그 GCC 3.0 및 배열 initialiser의 새로운 여분의 항목에서 위에 링크 된 문서에 따라 폐기됩니다.

1

C99 초기화를 사용할 때 멤버를 적절한 FAM으로 설정하십시오. 즉 char data [];

유효한 구조체를 FAM (또는 해킹 멤버 구조체)과 함께 만드는 유일한 방법은 경고 메시지에서 알 수 있듯이 마지막 멤버에 대해 올바른 양의 초과 저장 공간을 동적으로 할당하는 것입니다. 로컬 초기화가 유효하지 않습니다.