이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

[8주차] 전처리기와 분할 컴파일

  • 2020.04.10 15:31
  • 학부 수업/C프로그래밍

전처리기와 분할 컴파일

전처리pre-processing

컴파일러가 소스 파일을 컴파일하기 이전 과정으로 전처리기 지시자(#)를 사용함.

프로그램이 전처리 되는 과정은 소스파일(*.c)과 헤더 파일(*.h)을 사용하여 전처리한 소스 파일을 컴파일하여 오브젝트 파일(*.obj)로 만들고, 링커를 통해 라이브러리와 합쳐 실행 파일(*.exe)로 만듦.

전처리 지시자

프로그램의 선두에 위치하며, #으로 시작하고 문장 끝에 세미콜론을 사용하지 않음

전처리 지시자 기능
#include 프로그램 외부의 파일을 불러옴
#define 매크로 상수/함수를 정의
#undef 정의한 매크로 취소
#if ~ (#elif ~ #else ~) #endif 조건부 컴파일

#include

지정된 특정 파일의 내용을 해당 지시자가 있는 위치에 삽입

  • <>: 컴파일러가 제공하는 헤더 파일을 포함
  • "": 프로그래머가 직접 만든 파일을 포함하며, 경로를 \만으로 표현

#define

매크로 함수 및 상수 정의에 사용, 특정 상수를 프로그래머가 정의한 문자열로 대체

#undef

정의된 매크로를 해제. 해제한 매크로는 새로 재정의 가능

조건부 컴파일

전처리문에서 주어진 조건의 만족 여부에 따라 코드를 선택적으로 컴파일.

전처리 지시자 기능
#if ~ #endif 조건이 참이면 컴파일에 포함
#ifdef ~ #endif 매크로가 정의되어 있으면 컴파일
#ifndef ~ #endif 매크로가 정의되어 있지 않으면 컴파일
#if OS == 1
    printf("Linux");
#elif OS == 2
    printf("Windows");
#else
    printf("else");
#endif

단, 조건식에서 실수 상수, 문자열 상수, 변수 등을 사용할 수 없음.

분할 컴파일

하나의 프로젝트를 모듈 별로 여러 소스 파일에 나누어 작성한 후, 소스 파일 별로 컴파일 하는 것.

각 파일을 따로 작성, 컴파일 한 후, 링커를 통해 하나의 실행 파일을 생성하여 실행함.

각 함수별로 파일을 분리하여 만든 후, main이 있는 소스 코드에 각 소스 코드의 파일명과 일치하는 함수 원형을 정의해주면 됨.

주의사항

각 소스 파일은 독립적으로, 오류 없이 컴파일 되어야 함.

다른 파일에서 선언된 변수나 함수를 사용하고 싶다면 컴파일러에게 어떤 변수와 함수가 외부 파일에서 선언 및 정의된 함수인지를 extern선언을 통해 알려줘야 함.

extern 키워드

해당 변수 혹은 함수가 외부에 선언 및 정의되어 있다는 사실을 컴파일러에게 전달.

extern 키워드가 붙은 변수를 외부 변수라고 함. 함수의 경우 extern을 생략 가능.

static 키워드

정적 변수로 선언하되 외부 파일에서의 접근을 제한하려면 static 키워드를 변수나 함수 앞에 붙이면 됨.

헤더파일(*.h)

여러 소스 파일에서 사용하는 외부 변수나 함수 등을 모아놓은 파일로, 필요할 때 헤더파일만 include하여 사용 가능함.

상수, 자료형 정의, 함수 원형 선언, 외부 변수선언, typedef 정의, 매크로 명령문 등을 포함.

헤더파일을 중복으로 삽입하지 않도록 주의할 것

header1을 header2와 main이 include하는데, main에서 header1과 header2를 모두 include 하는 경우.

변수의 사용범위와 라이프 사이클

변수는 크게 변수의 사용범위와 지속시간으로 구분함.

사용범위

  • 전역 변수
    • 프로그램 전역에서 사용
    • extern을 사용하면 다른 파일에서도 사용
    • 프로그램 시작 시 할당된 메모리 공간이 종료 시까지 유지
  • 지역 변수
    • 선언된 함수/블록 내부에서만 사용
    • 프로그램 수행 도중, 함수나 블록이 시작 시 할당되고 해당 블록이 끝나면 해제
  • 정적 변수
    • static 키워드로 선언
    • 둘 다 전역 변수처럼 프로그램 실행 기간 전체 동안 지속
    • 변수의 사용 범위는 전역 변수이냐 지역 변수이냐에 따라 다름

'학부 수업 > C프로그래밍' 카테고리의 다른 글

[7주차] 파일 입출력  (0) 2020.04.10
[6주차] 연산자 함수, 자료형 심화  (0) 2020.04.10
[5주차] 동적 할당  (0) 2020.04.10
[4주차] 구조체  (0) 2020.04.10
[3주차] 문자열  (0) 2020.04.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [7주차] 파일 입출력

    [7주차] 파일 입출력

    2020.04.10
  • [6주차] 연산자 함수, 자료형 심화

    [6주차] 연산자 함수, 자료형 심화

    2020.04.10
  • [5주차] 동적 할당

    [5주차] 동적 할당

    2020.04.10
  • [4주차] 구조체

    [4주차] 구조체

    2020.04.10
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (283) N
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (49) N
      • 회고 & 계획 (20)
      • 내 이야기 (9)
      • 리뷰 (4) N
      • 군대에 간 공돌이 (10)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바