2013-11-22 1 views

답변

1

extern 선언입니다. 정의가 아닌 선언 일뿐입니다.

pkt_data은 다른 파일 또는 링크 된 다른 모듈에 정의됩니다.

크기를 보려면 pkt_data의 정의를 참조하십시오.

+0

'pkt_data'의 siez를 얻는 것이 가장 중요한 문제는'decalred'extern이 아니라 선언이 ** incomplete **라는 것입니다. 이러한 유형의 크기를 결정하는 것은 불가능합니다. – alk

0

당신은 크기를 선언하지 않았습니다. extern은 pkt_data []를 정의 할 것입니다. extern 선언에서 크기를 가져올 수 없습니다.

+0

일부 'extern' 선언 된 변수의 크기를 완벽하게 얻을 수 있습니다. 이 질문에서 선언 된 변수의 크기를 결정하는 것을 불가능하게하는 것은 'extern' 선언이 아닙니다. 선언은 ** [**] 때문에 ** 불완전합니다. – alk

2

선언문에 표시된 것은 모두 pkt_data이라는 배열이 있다는 것입니다. 크기는 여기에 지정되어 있지 않으며, 해당 행을 작성하지 않는 한 실제로 그 행을 정의하는 코드 (예 : 그 공간을 확보)에 해당 행의 세부 사항을 남겨 두어야합니다.

0

이 선언

extern unsigned char pkt_data[]; 

뿐만 아니라이 하나

unsigned char pkt_data[]; 

불완전 있습니다.

불완전한 유형의 크기를 결정할 수 없습니다.


은 어떻게 pkt_data 선언을 알 수 있습니까?

알다시피.

extern unsigned char pkt_data[]; 

은 선언입니다.

여기서 누락 된 내용은 정의입니다.

질문에 대답하십시오 : 이용 가능한 소스에서 검색하십시오. 정의에 액세스 할 수 없으므로 pkt_data의 크기를 확인할 기회가 없습니다. pkt_data을 확인할 수 있습니다.

우리가 알고있는 누구나는 pkt_data의 주소가 siez 포인터를 가졌을 것입니다. 다음 진술은 완벽하게 유효합니다 :

size_t s = sizeof(&pkt_data);