본문 바로가기
Software/C

[C 언어] 2. Pre-process(전처리)

by 리미와감자 2024. 9. 1.
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

댓글