전처리 명령어
#기호로 시작
프로그램을 간단히 확장가능하며 읽기 쉽게 만들어 유지보수에 도움
include명령어는 <>, “”을 사용하여 파일 이름을 작성
#include<>
포함할 파일을 컴파일러에 설정되어 있는 특정 디렉토리에서 탐색
주로 표준라이브러리 함수를 사용할 때 필요한 헤더파일 존재
#include""
우선 현재의 작업 디렉토리에서 찾고 해당 파일이 미존재시 컴파일러에 설정되어 있는 디렉토리에서 재검색
주로 사용자가 임의로 작성한 헤더파일을 포함시 사용하므로 포함하기 전에 먼저 헤더파일을 작성하여 현재의 작업 디렉토리에 저장
다른 디렉토리에 있는 파일을 직접 포함시 파일이름에 경로를 함께 지정 가능
예) c드라이브 밑에 user디렉토리 생성 후 myheader.h. 헤더파일 저장
#include"c:\user_manual\myheader.h"
헤더파일 사용시 프로그램을 깔끔하고 편리하게 작성 가능
예) 여러프로그램에서 공통적으로 사용하는 구조체, 함수, 외부 변수를 하나의 파일로 생성한 경우
define명령어
주로 소스파일이 아닌 헤더파일에 작성
헤더파일에 작성시 헤더파일을 사용하기위해 소스파일에 포함 필요
예) head.h → 헤더파일
#include<stdio.h>
예) C.c → 소스파일
#include "head.h"
int main(){
}
매크로명을 정의하여 복잡한 상수나 문장을 의미있는 단어로 사용가능하도록 설정
#define 매크로명 확장문자열
예) #define PI 3.14159 → 추후 PI로 작성시 전처리 후 확장문자열인 3.14159로 치환
매크로명은 다른 변수명과 쉽게 구별되도록 관례상 대문자로 작성
확장문자열은 매크로명과 하나 이상의 공백을 두고 작성
컴파일러는 전처리과정에서 프로그램에서 사용된 모든 매크로명을 확장문자열로 치환되지만 문자열상수 안에 포함되어 있는 매크로명은 치환되지 않으니 주의
매크로명
결국 상수값으로 바뀌므로 상수값으로 치환되는 매크로명을 매크로상수라고 지칭
즉, 상수를 의미를 가진 문자열로 기호화하여 사용
매크로명은 상수뿐만 아니라 복잡한 수식이나 문장에도 사용가능
예) #define ERR_PRN printf("범위 오류");
확장문자열은 중간에 공백을 사용가능하며 여러중에 걸쳐 사용시 \를 사용하여 연결
예)
#define INTRO "Perfect C language \
& Data Structure"
매크로명을 사용함으로써 프로그램에서 자주 사용되는 복잡한 숫자나 문자열 등을 의미있는 단어로 표현하여 프로그램을 읽기 쉽게 작성가능
매크로명 정의만을 변경한 후에 다시 전처리 과정을 거치면 프로그램에서 사용된 모든 매크로명을 수정 가능하므로 유지보수에도 도움
같은 수식이 반복사용되지만 서로 다른 변수들이 피연산자가 되거나 값이 바뀌는 출력문의 경우 일일이 매크로명을 지정
예) #define SUMXY x+y → a,b는 사용 불가
매크로 함수
이와 같이 동일한 수식이나 문장에 대하여 경우에 따라 각각 다른 값으로 확장될 수 있도록 작성
매크로함수를 만들 때는 매크로명에 바로 붙여서 괄호를 열어주며 괄호 안에 전달인자를 ,로 구분하여 나열후 괄호를 닫아 작성
예) #define SUM(x,y) x+y → 전달인자에 다른 변수를 사용시 확장문자열도 서로 다르게 확장
매크로함수는 확장 후에 다른 연산자와의 추가적인 연산에 의해 예상치 못한 결과값이 도출될 수 있으므로 확장문자열의 전달인자 부분을 모두 괄호로 묶어 작성
이때 모든 경우의 부작용을 막기 위해서 확장문자열을 구성하는 전달인자 하나하나에 모두 괄호를 붙여 작성하는 것을 권장
예) #define MUL(x,y) ((x)*(y))
'C' 카테고리의 다른 글
| const 예약어 (0) | 2024.03.30 |
|---|---|
| 조건부 컴파일 전처리 명령어 (0) | 2024.03.30 |
| fflush (0) | 2024.03.30 |
| fscanf, fprintf (0) | 2024.03.30 |
| fgets, fputs (0) | 2024.03.30 |