'인자를 가지는 매크로 전처리기'에 해당되는 글 1건

  1. 2020.12.09 전처리기

전처리기

C언어 2020. 12. 9. 17:03

전처리기

- 전처리기 구문은 다른 프로그램 영역과 독립적으로 처리됨

- 전처리기 구문은 소스코드 파일 단위로 효력이 존재함

 

파일 포함 전처리기

- #include는 전처리기에 가장 많이 사용되는 문법

- 특정한 파일을 라이브러리로서 포함시키기 위해 사용함

- #include 구문으로 가져올 수 있는 파일에는 제약이 없음

 

#include "파일 이름"

#include <파일 이름>

 

#include <파일 이름>

- 이와 같이 선언하면 시스템 디렉터리에서 파일을 검색함

- 운영체제마다 시스템 디렉터리가 존재하는 경로가 다를 수 있음

- 대표적으로 stdio.h와 같은 헤더 파일 등이 시스템 디렉터리에 존재함

 

#include "파일 이름"

- 이와 같이 선언하면 현재 폴더에서 파일을 먼저 검색함

- 만약 현재 폴더에 파일이 없다면 시스템 디렉터리에서 파일을 검색함

 

헤더 파일 만들기

1.

Visual Studio

소스파일에서 새 항목을 추가 > 헤더 파일 선택 후 추가

 

Xcode

상단 메뉴에 File > new > File... > Header File > next > create

 

2.

- #include를 이용해 가져오는 파일은 말 그대로 파일의 소스코드 자체를 다 가져오는 것

- 따라서 의도치 않게 한 번 참조한 헤더 파일을 여러 번 참조하지 않도록 유의해야 함

 

int add(int a, int b) {

   return a + b;

}

 

내가 정의한 헤더 파일 사용하기

- #include를 이용해 가져오는 파일은 말 그대로 파일의 소스코드 자체를 다 가져오는 것

- 따라서 의도치 않게 한 번 참조한 헤더 파일을 여러 번 참조하지 않도록 유의

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "Header.h"

int main(void) {
    printf("%d\n", add(3, 7)); // 만든 헤더 파일 불러오기
    system("pause");
    return 0;
}

 

매크로 전처리기

- 프로그램 내에서 사용되는 상수나 함수를 매크로 형태로 저장하기 위해 사용

- #define 문법을 사용해 정의할 수 있음

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1415926535

int main(void) {
    int r = 10;
    printf("원의 둘레: %.2f\n", 2 * PI * r);
    system("pause");
    return 0;
}

 

인자를 가지는 매크로 전처리기

- #define 문법에는 인자가 포함될 수 있음

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define POW(x) (x * x)

int main(void) {
    int x = 10;
    printf("x의 제곱: %d\n", POW(x));
    system("pause");
    return 0;
}

 

* #define 문법은 소스코드의 양을 획기적으로 줄이는 데 도움을 줌

#include <stdio.h>
#include <stdlib.h>
#define ll long long
#define ld long double

int main(void) {
    ll a = 987654321000;
    ld b = 100.5054;
    printf("%.1f\n", a * b);
    system("pause");
    return 0;
}

 

조건부 컴파일

- 조건부 컴파일은 컴파일이 이루어지는 영역을 지정하는 기법

- 일반적으로 디버깅과 소스코드 이식을 목적으로 하여 작성됨

- C언어로 시스템 프로그램을 작성할 때에는 운영체제에 따라서 소스코드가 달라질 수 있음

- 이때 운영체제에 따라서 컴파일이 수행되는 소스코드를 다르게 할 수 있음

 - #ifndef ~ #endif 문법은 대표적인 조건부 컴파일 문법

- 흔히 헤더 파일의 내용이 중복되어 사용되지 않도록 하기 위해 적용

#ifndef _Header_h_
#define _Header_h_

int add(int a, int b) {
    return a + b;
}

#endif

 

파일 분할 컴파일

- 일반적으로 자신이 직접 라이브러리를 만들 때에는 C언어 파일과, 헤더 파일을 모두 작성해야 함

 

* main.c

#include <stdio.h>
#include <stdlib.h>
#include "Header.h"

int main(void) {
    printf("%d\n", add(3, 7)); 
    system("pause");
    return 0;
}

 

* Header.c

#include "Header.h"

int add(int a, int b) {
    return a + b;
}

 

* Header.h

#ifndef _Header_h_
#define _Header_h_

int add(int a, int b);

#endif

 

 

- 전처리기의 사용은 필수는 아니지만 때에 따라서 소스코드를 획기적으로 줄일 수 있음

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

Printf와 Scanf  (0) 2020.12.14
변수와 상수  (0) 2020.12.14
파일 입출력  (0) 2020.12.08
구조체  (0) 2020.12.08
함수 포인터  (0) 2020.12.08
Posted by khon98
,