왜 전처리기라고 하냐 ? 컴파일 전에 미리 처리가 되어서.
전처리기
-
컴파일하기에 앞서서 소스 파일을 처리하는 컴파일러의 한 부분
지시어 의미 #define 매크로 정의 #include 파일 포함 #undef 매크로 정의 해제 #if 조건이 참일 경우 #else 조건이 거짓일 경우 #endif 조건 처리 문장 종료 #ifdef 매크로가 정의되어 있는 경우 #ifndef 매크로가 정의되어 있지 않은 경우 #line 행번호 출력 #pragma 시스템에 따라 의미가 다름
단순 매크로
매크로의 형태가 간단한 경우 -> #define 간단한 치환 기능.
- 프로그램의 가독성을 높인다.
- 상수의 변경이 용이하다.
예 : 산술, 수식도 전처리가 가능하다. 함수형태도 가능하다 전처리.
함수 매크로
매크로가 함수처럼 매개 변수를 가지는 것
#define 매크로(매개변수1, 매개변수 2,...) 치환텍스트
대체하라는 거지 계산과는 상관없는 이야기.
함수 매크로에서는 매개 변수를 괄호로 둘러 싸주는 것이 좋다.
컴파일러 -> 실행순서가 상관이 있다.
(++x)*(++x)
메모리에 저장해놨다가 언제 불러오느냐에 따라서 결과 값이 달라지는 경우
이렇게 쓰지 말라. 이렇게 쓰면 안된다.
읽는 사람이 불분명하게 이해할 수 있는 요소는 쓰면 안된다.
읽어보면서 당연하게 따라갈 수 있는 방식으로 작성하는 게 좋다.
함수 매크로 장단점
- 함수 호출 단계가 필요 없어 실행 속도가 빠르다.
- 소스 코드의 길이가 길어진다.
- 간단한 기능은 매크로를 사용
내장 매크로
__DATE__ 현재의 날짜 __TIME__ 현재의 시간 __LINE__ 현재의 라인 번호 __FILE__ 소스 파일 이름 치환
함수 에러
printf("컴파일 날짜=%s\n", __DATE__);
– printf("치명적 에러 발생 파일 이름=%s 라인 번호= %d\n", __FILE__, __LINE__)
이런 식으로 활용
참고자료
C언어로 쉽게 풀어쓴 자료 구조 천인국(저) 2009년