extern과 include 그리고 static

김준영·2021년 3월 1일
0

C/C++, Assembly

목록 보기
1/2

예약어 extern

현재파일이 아닌 외부파일에 위치한 변수를 사용할 수 있게 한다.

assembler에 의해 선언된 외부변수에 .extern directive가 붙여지고, 이 외부변수가 정의된 파일에는 해당 변수에 .global directive가 붙여진다.

assembly 과정을 거쳐 나온 각각의 object module 에서 외부변수의 주소는 0 이고(=아직 모르는 상태), linker에 의해 linking 과정에서 실제 변수에 대응되는 주소가 계산되고, 확정된다.

전처리기 지시자 include

외부파일(보통 헤더파일)을 현재파일의 위쪽에 포함시켜 함께 컴파일할 수 있게 한다.

헤더파일의 변수와 함수는 보통 extern 예약어와 함께 쓰이는데, 함수의 경우 extern 예약어 없이도 assembler에서 자동으로 extern의 기능을 적용시키므로 보통 변수의 앞에 붙인다.

각기 다른 의미의 static

1. static variable 사용

이 경우 assembly에서 .fill directive에 해당되며, 선언과 동시에 0의 값을 가진다.(정의한 값이 따로 없을 때)
따라서 이 변수는 run-time 이전에 하나의 소스코드로 이미 존재하고 있고, dynamic local variable과 달리 br, jmp, jsr 등 함수 호출 간에도 값을 유지한다.

2. 해당 변수 및 함수를 외부파일에서 사용을 억제

assembler에게 해당 변수 및 함수에 .global directive가 붙는 것을 막으므로써 다른파일의 .extern directive와 연결되지 못하게 한다.

위 2가지 기능은 같은 지시어 static으로 종종 혼동을 준다.

profile
개인블로그

0개의 댓글