Day 2 - Preprocessor

2025. 2. 25. 10:43·IDEC 교육/Embedded C

#define (= 치환)

#define은 치환을 하는 기능을 함

  • EXAMPLE을 42로 치환하는 예제
#define EXAMPLE 42

 

#if  #else  #endif  (= 조건 컴파일)

컴파일시에 컴파일을 할지 안할지 선택 가능

  • ifdef는 조건으로 하나의 정의된 형식만 사용 가능 (ifndef는 !ifdef와 같음)
#ifdef 조건
~
#else
~
#endif
#ifndef 조건
~
#else
~
#endif
  • if는 조건으로 여러 정의 형식 사용 가능
#if(조건)
~
#else
~
#endif
  • elif를 사용하여 조건을 추가하여  사용 가능
#if(조건)
~
#elif
~
#else
~
#endif

 

Header file 작성시 활용

  • a.h
#ifndef _A_H_
#define _A_H_
~
#endif
  • b.h
#ifndef _B_H_
#define _B_H_
~
#include "a.h"
~
#endif
  • c.h
#include "a.h"
#include "b.h"
~

순서대로 a와 b 헤더파일을 불러오는데,

만약 ifndef 조건이 없다면 a.h를 불러오고 b.h에서 a.h를 한번 더 불러와서 중복 include로 인해 오류가 생김

위의 코드대로 작동한다면, a.h를 불러오고 그때 _A_H_가 define 되므로

b.h에서 다시 a.h를 불러 올때 ifndef로 인해 다시 include되지 않는다.

Macro (#define 활용)

  • 간단한 연산을 미리 지정하여 활용 (예시)
#define BIT_CLEAR(data, bit)    (data &= ~(0x1<<bit))
#define BIT_SET(data, bit)      (data |= (0x1<<bit))
#define BIT_TOGGLE(data, bit)   (data ^= (0x1<<bit))
#define BIT_CHECK(data, bit)    (data & (0x1<<bit))
  • Compiler에서 정의된 기본 macro: 실행시에 print를 하면 해당 내용을 출력
__LINE__ : line number
__FILE__ : file name
__DATE__ : date
__TIME__ : time
__func__ : function name
__cplusplus : when use C++, blocking name mangling

do ... while(0)

여러 line으로 define을 하게 되면 치환시에 오류가 생길 확률이 높아지므로,

do ... while(0)문으로 묶어서 한번만 실행하는 코드 블럭을 만들어서 활용

  • do while문은 "do" 실행후에 "while"을 실행하는 코드인데, while에 0을 넣음으로서 후에 실행되는 내용을 없앰
#define PRINT(x)  do {                      \
                     printf("======= \n"); \
                     printf("%s\n", x);    \
                     printf("======= \n"); \
                  } while(0)
  • 활용 예시
if(a) PRINT(x);
else ~~

#pragma (= 전처리기)

  • Compile전에 처리되는 Compiler에게 무언가를 지시하는 내용

 

저작자표시 비영리 변경금지 (새창열림)
'IDEC 교육/Embedded C' 카테고리의 다른 글
  • Day 3 - Character Pointer & Array
  • Day 2 - Pointer & Array
  • Day 1 - Modular(%) vs Bit-wise AND(&)
  • Day 1 - Build 과정
Zi_Yoon
Zi_Yoon
머리 속에 정리하는 곳 <전자공학>
  • Zi_Yoon
    ZY_repo
    Zi_Yoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • HDLBits (25)
        • Verilog (19)
        • Circuits (4)
        • Verification (0)
      • IDEC 교육 (1)
        • Embedded C (13)
        • Verilog HDL (8)
      • Hardware (8)
        • RISC-V Project (1)
        • Computer Architecture (0)
        • AMBA (2)
        • FPGA (0)
        • 논문 읽기 (1)
        • ETC. (4)
      • 42서울 (13)
        • 리눅스 (12)
        • 네트워크 (1)
      • 생각 (1)
      • 취업 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    verilog
    hdlbits
    RISC-V
    vm
    signal trap
    bit-wise and
    APT
    fpga
    research rabbit
    lsblk
    verilator
    embedded
    ssh
    IDEC
    비대칭 키
    fucntion
    debian
    centos
    ARM
    Keil
    charater
    QUARTUS
    보안 쉘
    pointer
    AppArmor
    세션 키
    c
    AMBA
    axi
    AXI4
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Zi_Yoon
Day 2 - Preprocessor
상단으로

티스토리툴바