ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴파일 전 처리 (전처리기)
    C언어 2020. 3. 28. 15:32

    전처리기란 ?

    그동안 ~~~.c 와 같은 형태의 프로그램 파일을 작성하여 컴파일 하고 컴파일 된 오브젝트 파일을 링크하여 실행파일을 만들고 해당 실행파일을 Load 하여 실행하였을 것이다. 이때 컴파일 전에 처리하는 과정이 하나 있는데 이 과정을 전처리 과정이라 한다. 이 전처리 과정은 #include 라는 것을 작성하여 " 해당 구문은 컴파일 전에 처리해주세요 ~ " 라는 의미로 사용한다. 

    ~~~.c : 프로그램의 실질적 동작이 기술된 정의 파일

    ~~~.h : ~~~.c 파일에서 사용한 외부의 함수, 자료들이 선언된 파일

    그동안 스탠다드 I/O 헤더파일에 정의 된 함수인 prinf, puts, gets 등의 표준 입출력 함수를 사용해 왔을 것이다. 이때 이러한 표준 입출력 함수는 사용자가 만들지 않고 VS 에디터에서 제공해준 함수를 사용한 것이다.

    즉 사용자가 사용한  VS 에디터에는 이러한 표준 입출력 함수가 어딘가 선언 되어 있으며 이런 선언 파일을 #include 라는 구문을 통해 전처리 하여 사용자가 직접 해당 프로그램 파일 ( ~~~.c ) 에 사용한 함수를 선언을 한 것과 동일하다.

    C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include

     

     위와 같이 해당 에디터가 설치된 디렉터리의 컴파일 Setting 디렉터리에 접근해 보면 실제로 stdio.h 라는 헤더 파일이 정의 된 것을 볼 수 있다. 이때 해당 헤더 파일을 열어서 확인해 보면 실제로 사용자가 사용한 printf, gets, pust 등의 표준 입출력 함수들의 선언들을 확인 할 수 있다.

     위와 같이 printf, puts 함수등의 함수 원형을 볼 수 있다.

     

    전처리기 사용법

    위와 같이 프로그램이 동작해야 하는 부분을 함수 형태로 나누어 파일형태로 작성한 것을 함수의 선언부만 모아 헤더파일로 만들고 해당 파일을 전처리 과정에 기술하여 전처리 한다. 이로인해 외부에 있는 파일을 include 하여 해당 파일에 기술된 동작 및 Data 를 사용하게 된다. 이와 같은 과정이 전처리 과정이며 해당 전처리 과정은 전처리기 라는 것이 해준다.

    전처리기를 사용하는 방법은 두가지가 있다.

    1. #include <해당 헤더 파일명> : 컴파일러의 설정 디렉터리에서 해당 헤더 파일을 검색한다.
    2. #include "해당 헤더 파일명"   : 현재 include한 디렉터리의 위치에서 헤더 파일을 검색한다. 

     

    위와 같이 새로운 Test.c 파일을 만들어 test_f 이라는 함수를 정의 하며 해용은 매개변수로 입력받은 문자열을 출력한다. 이때 같은 Hello.c 디렉터리 안에 Test_f.h 라는 헤더파일을 생성 후 test_f 함수를 선언한다. 

    위와 같은 형태로 함수의 원형을 선언하며 이제 Hello.c 파일에 전처리기를 사용하여 Test.h 파일을 포함시켜 Test.h 헤더 파일에 선언된 test_f 함수를 사용해 보자

    #include<stdio.h>
    
    // Test.h 헤더파일 포함
    #include"Test.h"
    
    
    int main(int argc, char** argv){
    
    	char str_list[32] = { 0 };
    
    	scanf_s("%s", str_list, sizeof(str_list));
    
    	// test_f 함수 사용 
    	test_f(str_list);
    	
    }
    
    

     이와 같이 사용하면 결과는 성공적으로 입력 값이 출력 된다.

    'C언어' 카테고리의 다른 글

    컴파일 최적화  (0) 2020.03.27
    메모리 구조  (0) 2020.03.16
    C 프로그램의 동작 과정  (0) 2020.03.16
    스택 프레임 & 재귀함수  (0) 2020.03.13
    포인터의 이해  (0) 2020.03.07

    댓글

Designed by Tistory.