열렬히.뛰기

전처리와 매크로

Language > 프로그래밍 언어 > C > 전처리와 매크로

전처리기

  • 컴파일러의 한 부분
  • 소스 파일을 처리해 수정된 소스 파일을 생산.

종류

  • #define : 매크로 정의
  • #include : 파일 포함
  • #undef : 매크로 정의 해제

단순 매크로

c
#define MAX_SIZE 100

함수 매크로

매크로가 함수처럼 매개변수를 가지는 것.

좀 더 함수에 비해 수행 속도가 빠르다.

c
#define SQUARE(x) ((x) * (x))
// 반드시 괄호를 이용해 정의해야 한다.

int main() {
		SQUARE(3);
}

내장 매크로

c
printf("%s\n", __DATE__); // 소스를 컴파일된 날짜로 변환
printf("%s\n", __TIME__); //
printf("%s\n", __LINE__); //
printf("%s\n", __FILE__); //

조건부 지시자

어떠한 조건을 만족한 경우에만 지정된 소스 코드 블록을 컴파일

c
#ifdef DEBUG
		printf("")
#endif

DEBUG가 정의되어 있다면 #ifdef와 #endif 사이의 코드를 실행한다.

c
#define DEBUG 3

int main() {
		#ifdef DEBUG
				printf("")
		#endif
}

다중 소스 파일

코드를 파일 여러개로 나눠 놓는 것.

c
// main.c
#include <stdio.h>
#include "power.h"

int main() {
		int x, y;
		scanf("%d", &x);
		scanf("%d", &y);
		printf("%d", power(x,y))
}
c
// power.c
#include "power.h"

double power(int x, int y) {
		double result = 1.0;
		for (int i = 0; i < y; i++) {
				result *= x;
		}
		return result;
}
c
// power.h
// power.c에 대한 헤더파일

#pragma once
double power(int x, int y); 

헤더 파일을 사용하지 않으면, 함수 원형이 여러 소스파일에 존재하여야 하므로 같은 내용이 중복되어 비효율적이다.

헤더 파일에 함수들의 원형을 넣어두고 다른 소스파일에서 헤더파일을 포함하는 방법을 사용하면 몇 안되는 내용으로 원형을 모두 활용할 수 있는 구조가 형성되므로 효율적이라 할 수 있다.

헤더 파일에는 일반적으로 함수의 원형 말고도 구조체 정의, 매크로 정의, typedef 정의 등의 내용을 작성한다.

외부변수를 선언할 때에는 extern 키워드를 사용함으로써 선언할 수 있다.