더북(TheBook)

struct stardate 선언문의 가시 범위(visibility)struct person과 같다. 가장 바깥쪽의 struct 선언문(즉, person)의 {} 안에 중첩해서 정의한 struct(즉, stardate)에 대해서는 스코프가 새로 정의되지 않는다. 이는 C++를 비롯한 다른 프로그래밍 언어와 다른 점이다.

TAKEAWAY 6.28 중첩된 선언문에 나오는 struct는 모두 스코프가 같다.

다시 말해 앞에서 중첩해서 선언했던 struct의 스코프가 전역 범위라면 두 struct 모두 C 파일 전체에서 볼 수 있다. 두 struct가 함수 안에 선언됐다면 스코프는 그 함수의 {} 블록 안으로 제한된다.

따라서 다음과 같이 정의하는 것이 좀 더 적절하다.

struct stardate {
  struct tm date;
  struct timespec precision;
};
struct person {
  char name[256];
  struct stardate bdate;
};

이렇게 하면 모든 struct를 동급으로 만들 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.