Computer/프로그래밍 일반

[컴파일에러]struct x declared inside parameter list

수지밝은미소 2007. 7. 11. 18:19
 
Q 11.5
컴파일러가 다음 선언을 만나면:
  extern int f(struct x *p);
``struct x introduced in prototype scope''라는 이상한 경고를 발생시킵니다.
Answer
C 언어의 블럭 스코프(scope) 규칙에 따르면 함수의 프로토타입에만 선언된 structure는 같은 소스의 다른 구조체와 호환성이 없습니다 이 structure와 tag는 함수의 프로토타입 선언이 끝날 때 스코프를 벗어납니다;

함수 prototype 앞에 structure 선언을 두어 이 문제를 해결할 수 있습니다. (보통, prototype과 structure 선언은 같은 헤더 파일에 존재하며, 이렇기 때문에 한쪽이 다른 한쪽을 참조할 수 있습니다.) 만약 prototype에 아직 선언되지 않은 structure를 꼭 쓸 필요가 있다면, prototype 앞에 다음과 같이 써 줍니다:

  struct x;
아무것도 아닌 것 같은 이 선언은 struct x 이렇게 하면, 이 구조체의 (incomplete) 선언이 파일 스코프를 가지게 되어, 이후에 나올 선언에서 struct x를 사용할 때, 같은 struct x를 가리키도록 할 수 있습니다.

'Computer > 프로그래밍 일반' 카테고리의 다른 글

clock_gettime()  (0) 2008.06.17
[스크랩] [ANSI C] 3. 데이타의 형(data`s type)  (0) 2007.12.06