ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (626)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (13)
      • dreamhack (12)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

분할 컴파일 & 조건부 컴파일
development/C

분할 컴파일 & 조건부 컴파일

2023. 1. 5. 01:18

이전 글에서 실행 파일이 만들어지는 과정에 대해 알아보았다.

https://ssongkit.tistory.com/273

 

C 언어의 실행 파일 생성 과정

C 언어에서 실행 파일을 생성하는 과정은 아래 그림과 같다. 1. 소스 파일(source file)의 작성 우리가 일반적으로 하는 코딩이다. 2. 선행처리기(preprocessor)에 의한 선행처리 선행처리 문자(#)로 시작

ssongkit.tistory.com

여러 개의 소스 파일을 작성하여 최종적으로 링크를 통해 하나의 실행 파일로 만드는 것을 분할 컴파일이라 했다.

분할 컴파일에 대해 알아보자.

 


분할 컴파일

코딩할 때 하나의 파일에 모든 것들을 코딩하지 않으며

기능별로 파일을 나눠서 코딩하게 되는데 이를 모듈화 프로그래밍이라고 한다.

모듈(module): 프로그램을 구성하는 구성 요소(관련된 데이터와 함수를 하나로 묶은 단위)

 

이렇게 작성된 모듈은 개별적으로 컴파일된 후 링커에 의해 하나의 실행 파일로 만들어진다.
이렇게 하나의 실행 파일을 만들기 위해서 소스 파일을 여러 개로 나누어 개발하는 방식을 분할 컴파일 방식이라고 한다.

http://www.tcpschool.com/c/c_complie_module


extern 키워드

분할 컴파일 방식에서 여러 개의 소스 파일 사이의 상호 참조는 전역 변수와 전역 함수만이 가능하다.
기본적으로 C 컴파일러는 프로그램에 등장하는 전역 변수를 해당 파일에서만 찾는다.
따라서 외부 파일에서 참조하는 전역 변수는 컴파일러에게 외부 파일에 존재하는 변수라는 사실을 명시해야 한다.

이를 위해 파일 내에서 extern 키워드를 사용해 다시 한 번 변수를 선언해야 한다.
C 컴파일러는 extern 키워드가 붙은 전역 변수가 외부 파일에 존재하는 변수임을 인식하고 컴파일을 진행하게 된다.
extern 키워드가 붙은 전역 변수는 컴파일된 후 링크 단계에서 실제로 연결된다.

 


static 키워드

분할 컴파일 방식에서 변수의 접근 영역을 해당 파일로만 한정시키고자 할 때는 static 키워드를 사용하여 선언하면 된다.
이렇게 선언된 변수는 다른 소스 파일에서 extern 키워드를 사용해 선언하더라도 접근할 수 없는 전역 변수가 된다. 

http://www.tcpschool.com/c/c_complie_module

 


조건부 컴파일

조건에 따라 코드의 일정 부분을 컴파일할지 안 할지를 지정할 수 있다.

조건부 컴파일에 사용할 수 있는 조건부 컴파일 지시자(conditional compile directive)는
#if, #ifdef, #ifndef가 있다.

 


#if

if문과 쓰임새가 유사하다.

#if 뒤에 나오는 조건식의 결과가 0이 아니면 true, 0이면 false이다.

'#if ~ #elif ~' 또는  '#if ~ #elif ~ #else ~' 를 사용해 여러 개의 조건을 사용할 수 있다.

단, if 문과 달리 #endif 지시자로 조건부 컴파일의 끝을 명시해야 한다.

 


#ifdef

if defined의 줄임말이다.

#ifdef 지시자 다음에 나오는 매크로 이름과 같은 이름의 매크로가 이미 정의되어 있으면 해당 내용을 컴파일한다.
마찬가지로 #elif, #else 지시자를 사용할 수 있으며

#endif로 끝을 명시해야 한다.

 


#ifndef

ifdef의 not이 붙은 지시자로 not이 붙는 것 외에는 ifdef 지시자와 기능이 동일하다.

즉, #ifndef 지시자 다음에 나오는 매크로 이름과 같은 이름의 매크로가 정의되어 있지 않으면 해당 내용을 컴파일한다.

 


레퍼런스

http://www.tcpschool.com/c/c_complie_module

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

http://www.tcpschool.com/c/c_compile_condCompile

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'development > C' 카테고리의 다른 글

C 언어의 실행 파일 생성 과정  (0) 2023.01.04
    'development/C' 카테고리의 다른 글
    • C 언어의 실행 파일 생성 과정
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바