728x90
반응형
2. Pre-process(전처리)
전처리 지시자
#include
- 지정한 파일을 읽어 와서 지시자가 있는 위치에 삽입한다.
- #include < > : 시스템 헤더파일 내용 복사. 컴파일러가 설정한 include 디렉터리에서 검색.
- #include “ ” : 사용자 정의 헤더파일 내용 복사. 소스 파일이 저장된 디렉터리에서 검색.
- 단순히 해당 파일을 지시자가 있는 위치에 삽입하는 것이므로, 반드시 특정 코드의 맨 위에 넣을 필요는 없다.
- 소스 파일(.c)도 포함할 수 있다.
#define
- 매크로명을 정의하는 전처리 지시자
- 모든 매크로는 전처리 과정에서 단순히 치환될 부분으로 바뀌는 것 뿐이다.
- 단순 매크로
- #define 매크로명 치환될_부분(관례적으로 대문자 사용)
- 매크로 상수 : 상수 대신에 쓰이는 매크로명
- 함수 매크로
- #define 매크로_함수명(인수) 치환될_부분(관례적으로 대문자 사용)
- 치환된 후 부작용을 막기위해 치환될 모든 인수에 괄호를 써서 정의한다.
- 함수 호출 단계가 없어서 실행 속도가 빠르다.
매크로 연산자 #, ##
- # : 매크로 함수의 인수를 문자열로 치환
- ## : 두 인수를 붙여서 치환
조건부 컴파일 : 소스 코드를 조건에 따라 선택적으로 컴파일
- #if, #else, #elif, #ifdef, #ifndef, #endif, #undef …
- 조건식은 상수나 매크로 상수를 사용
- defined : 특정 매크로가 정의되어 있는지 확인
- if defined 매크로명 == ifdef 매크로명
- !defined : 특정 매크로가 정의되어 있지 않은지 확인
- if !defined 매크로명 == ifndef 매크로명
- undef 매크로명 : 매크로명 정의 취소
#error : 컴파일 중단 지시자
- #error 메시지
- 조건을 만족하지 않아 컴파일 자체를 중단할 때 사용
#pragma
- 컴파일러에 대한 특정 지시를 제공하는 지시자
- 컴파일러마다 다를 수 있음
#line
- #line 줄 번호
- #line 줄 번호 “파일명”
- 컴파일러에 코드의 위치 정보를 제공하거나 수정하기 위해 사용
- 디버깅 시, 소스 코드의 위치를 추적할 때 유용
정리
지시자 | 설명 | 예제 코드 |
#include | 다른 파일의 내용을 포함시킴. | #include <stdio.h> |
#define | 매크로를 정의함. | #define PI 3.14 |
#ifdef | 매크로가 정의되어 있는지 확인함. | #ifdef DEBUG |
#ifndef | 매크로가 정의되어 있지 않은지 확인함. | #ifndef VERSION |
#if | 조건부 컴파일을 시작함. | #if defined(_WIN32) |
#else | 조건부 컴파일의 대체 분기를 정의함. | #else |
#elif | #if와 #else 사이에 추가 조건을 정의함. | #elif defined(_DEBUG) |
#endif | 조건부 컴파일 블록의 끝을 표시함. | #endif |
#line | 현재의 줄 번호와 파일 이름을 설정함. | #line 100 "file.c" |
#error | 컴파일 에러를 발생시킴. | #error "This is a critical error!" |
#warning | 컴파일 경고를 발생시킴. | #warning "This is a warning!" |
#pragma | 컴파일러에 특화된 지시를 제공함. | #pragma pack(1) |
#undef | 매크로의 정의를 제거함. | #undef MAX_SIZE |
728x90
반응형
'Software > C' 카테고리의 다른 글
[C 언어] 3. Memory Structure(메모리 구조) (0) | 2024.09.01 |
---|---|
[C 언어] 1. Introduction (0) | 2024.08.31 |
댓글