링커, 로더, 실행 파일

C 언어에서 「extern int count;」라고 썼을 때의 의미로 올바른 것은?

  1. Acount라는 변수가 다른 어딘가에서 정의되어 있음을 선언하며, 여기서는 영역을 확보하지 않는다
  2. Bcount라는 변수를 새로 만들고 0으로 초기화한다
  3. Ccount라는 변수를 이 파일 바깥에서 보이지 않게 한다
정답과 해설 보기

정답: A. count라는 변수가 다른 어딘가에서 정의되어 있음을 선언하며, 여기서는 영역을 확보하지 않는다

extern은 「이 이름의 변수는 다른 파일 등에서 정의되어 있다」라는 선언으로, 메모리 영역은 확보하지 않습니다. 컴파일러는 count의 주소를 모른 채 참조하는 명령을 만들고 그 위치를 재배치 정보에 기록합니다. 링커가 다른 파일에 있는 「int count = 0;」 같은 정의와 연결해 주소를 정합니다. 헤더 파일에 extern 선언을 쓰고, 정의는 하나의 소스 파일에 두는 것이 기본입니다.

  • A. 올바릅니다. 선언일 뿐이며 정의는 다른 곳에 있습니다.
  • B. 영역을 확보하는 것은 정의인 「int count;」 등입니다.
  • C. 바깥에서 감추는 것은 static입니다.
이 분야 연습하기 분야로 돌아가기

링커, 로더, 실행 파일의 다른 문제

  1. Linux 등에서 많이 쓰이는 ELF 형식의 파일에 대한 설명으로 올바른 것은?
  2. 실행 파일의 .text 섹션에 들어 있는 것은?
  3. C 언어에서 파일 바깥에 「int limit = 100;」이라고 쓴 전역 변수는 일반적으로 어느 섹션에 놓이는가?
  4. .bss 섹션의 특징으로 올바른 것은?
  5. C 언어의 「char *p = "hello"; p[0] = 'H';」를 실행하면 많은 환경에서 비정상 종료된다. 그 이유로 올바른 것은?

이 분야의 비교