extern으로 불러온 변수는 sizeof로 값을 알 수 없나요?
글쓴이: superkkt / 작성시간: 목, 2006/02/02 - 12:24오전
char *ftp_cmd[] = { "USER", "PASS", "ACCT", "CWD", "CDUP", "SMNT", "REIN", "QUIT" };
위와같이 정의된 배열이 있습니다. 이 배열을 다른 파일에서 extern으로 불러와서 원소의 개수를 파악하기 위해 아래와 같이 sizeof를 하면 에러가 나네요.
cnt = sizeof(ftp_cmd) / sizeof(char *);
Quote:
pi.c:164: error: invalid application of `sizeof' to incomplete type `({anonymous})'
extern으로 불러온 변수는 sizeof를 할 수 없나요?
[/code]
Forums:
extern이어서 그런 것이 아니라 에러 메시지에 나와 있듯이 불완전형으
extern이어서 그런 것이 아니라 에러 메시지에 나와 있듯이 불완전형으로 선언했기
때문입니다. 배열의 경우 원소의 개수와 형이 모두 알려져야 완전형이 되는데. 아마
개수를 알려주지 않은 모양입니다.
extern char *ftp_cmd[];
헤더에 이렇게 선언하지 않으셨나요?
........
cinsk 님이 출현하셔서
http://www.cinsk.org/cfaqs/html/node3.html#SECTION00380000000000000000
와 같은 답변을 남긴다에 한표 ^_______^
두분 답변 정말 감사합니다. 덕분에 쉽게 해결했습니다. 조금만 뒤져보면
두분 답변 정말 감사합니다. 덕분에 쉽게 해결했습니다. 조금만 뒤져보면 나오는 답을 못찾고 있었네요..
그리고 이건 약간 다른 질문인데요.. 위와같이 다른 파일에서 정의된 배열을 extern으로 가지고올때 헤더파일에 해당 배열에 대한 선언이 꼭 있어야 하나요?
지금은 헤더파일에 선언을 하지 않았는데 아무런 경고도 없길래 그냥 사용하고 있습니다.
======================
BLOG : http://superkkt.com
[quote="superkkt"]그리고 이건 약간 다른 질문인데요.. 위
물론이죠. 꼭 헤더에 의할 필요는 없지만 어쨌든 선언은 반드시 해야 합니다.
두 가지 가능성이 있습니다. 선언이 있는데 없다고 생각하시거나 컴파일러가 엉터리이거나...
[code:1]char *ftp_cmd[] = {
이 자체가 선언과 정의를 동시에 하는게 아닌가요? 전 그렇게 생각해서 따로 헤더파일에 선언을 적지 않았습니다. 위 정의가 a.c라는 파일에 있고 a.h에는 위 정의와 관련된 내용은 없습니다. 이 상태에서 b.c 파일에서 아래와 같이 불러옵니다. (b.c가 a.h를 include는 하고있습니다)
그리고 컴파일할때는 한꺼번에 하는 경우도 있고 파일별로 하는 경우도 있는데 경고가 안나오더라구요..
제가 잘못 알고있는 부분에 대해서 지적 부탁드립니다. :oops:
======================
BLOG : http://superkkt.com
[quote="superkkt"][code:1]char *ftp_cmd&
맞습니다.
하지만 이 선언이 저절로 다른 소스 파일에 알려지지는 않죠. 그래서 보통 헤더에
선언을 하여 여러 소스에 알려지도록 합니다.
선언하셨잖습니까. -_-; 이 선언은 a.h에 넣는 게 좋겠군요.
Re: ........
:wink:
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
[quote="doldori"][code:1]void func&#
헙.. 이게 선언하는 부분이였군요.. :oops: C언어 펀더멘탈을 다시 한번 읽어봐야겠습니다. 감사합니다~
======================
BLOG : http://superkkt.com
댓글 달기