markyang92.log
로그인
markyang92.log
로그인
c의 링킹, 헤더, 전역변수 extern static
markyang92
·
2023년 2월 19일
0
0
C
목록 보기
7/7
C의 빌드 4단계
전처리
컴파일
어셈블
여기서
.o
파일 생성
링크
헤더파일
함수 선언
원형을 알아야 사용할 수 있기 때문
매크로
extern
변수 선언 등
include
<>
,
" "
디스크 상의 어디에서 찾느냐?
< >
는 시스템 경로에서만 헤더 파일을 검색
보통 컴파일러가 제공하는 시스템 헤더 파일을 인클루드 할 때 사용
" "
는 기본적으로 워킹 디렉토리에서 헤더 파일을 검색한 뒤 시스템 경로를 검색
오브젝트 코드
build
의 어셈블 이후 생성되는 파일
오브젝트 코드는 기계가 곧바로 이해 가능한 기계코드이다.
링크
링커가 링크를 수행한다.
입력이
모든 오브젝트 코드들
을 합쳐서 하나로 만들어준다.
.o
파일을 보면, 레이블이 있는데 이 레이블이 어디에 있는지 메꿔준다.
dynamic link
dynamic library
는
여기 참고
실행파일은 여전히 구멍을(레이블)을 남겨둠
실행파일을 실행할 때 실제로
링킹
이 일어남
이 링킹은 실행 중에, 운영체제가 해줌
여러 실행파일이 동일한 라이브러리 공유 -> '메모리 절약'
파일 범위 변수(전역 변수)
전역변수
다른
소스코드 파일
에서
링크 가능
프로그램 실행 동안 공간 차지
스택(x)
데이터 섹션
에 들어감
미리 컴파일될 때 어디에 들어갈 줄 앎
다른 파일의 전역변수 사용하기
다른 파일의 전역변수는 잘 모른다.
그렇다고
똑같은 이름의 전역변수 쓰면 안된다(함수도 그렇잖아)
그래서 사용하는 것이
extern
extern
헤더
에
extern
키워드 쓰고 전역변수 써두면,
해당
헤더
를
include
하는 어떠한
.c
파일에서 선언하면 됨.
extern
키워드를 빼먹으면,
링커 오류
올바른 extern 사용법
남의
라이브러리
는
.c
파일을 볼 수 없음
라이브러리 바이너리
,
header
만 줌
이 경우, 제작자가
extern
을
header
에 줌
함수는 extern 안붙임
함수는 그냥 선언하면 자동으로
extern
전역변수의 문제 -> static!
확실히 문제가 있음
extern
을 사용하면, 아무데서나 확인가능하고, 심지어는 내 파일 안의 변수를 바꿔버림
다른 놈이 내 전역 변수를 못쓰게 하자!
내 파일 안에서만 전역 변수를 사용
static 지역 변수
어찌됬건
static
을 두면, 지역변수 범위내 전역화!
static 함수
파일 내에서만 사용
위 파일을 고쳐 약간
getter
,
setter
처럼 사용해보자.
markyang92
pllpokko@alumni.kaist.ac.kr
이전 포스트
scope const goto stack 배열
0개의 댓글
댓글 작성