일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래밍
- 파이썬
- AWS
- 토플
- python
- 오토사
- 자동차sw
- probability
- 개발자
- 토플 라이팅
- TOEFL
- can
- AUTOSAR
- Bitcoin
- 퀀트
- 확률
- 암호화폐
- 자동매매
- 클라우드
- it
- Cloud
- 블록체인
- toefl writing
- GeorgiaTech
- 아마존 웹 서비스
- backtest
- 비트코인
- 백트레이더
- backtrader
- 백테스트
- Today
- Total
Leo's Garage
Preprocessor (전처리기) 본문
앞의 포스팅에서는 Compile에 대한 이야기를 해보았다.
이번 시간에는 Proprocessor, 즉 전처리기에 대한 이야기를 해보고자 한다. 우선 전처리기가 실행되는 시점부터 언급하고 넘어가겠다. 전처리기는 Compiler가 *.c 파일을 *.s 파일로 바꾸기 전에 C processor 와 Lint processor라는 것들이 Syntax를 정리하는 과정을 거친다.
예를 들어 MACRO나 define으로 선언된 것들을 실제 Compiler가 Compile을 하기 전에 정리해준다고 생각하면 편하다.
#define and &
a = a and b
만약에 위의 같은 코드가 있다고 해보자, 이 코드를 전처리기에 돌리게 되면
a = a & b
위와 같은 형태로 변하게 된다.
그럼 이렇게 바꿀 수 있는 녀석들은 뭐가 있을까? 예를 들어 #define #if #ifdef 등등이 있을 수 있다.
자 그럼 전처리기를 사용하면 어떤 점이 좋을까를 생각해보면, 아래와 같은 예제를 생각해보자
#ifdef Resolver
inputResolverSig();
arcTanAngle();
angle = resultAngle();
#endif
#ifndef Resolver
checkEncoder();
#endif
위와 같은 간단한 코드를 살펴보면, #ifdef를 통해서 Resolver라는 값이 0이 아니면 위 쪽 코드 블럭이 실행될 수 있고 아니라면 아래쪽 코드가 실행될 수 있다.
보통 임베디드 시스템에서 하나의 동작을 위해 여러가지 인터페이스를 만드는 경우 혹은 타겟 아이템에 따라 기능을 따로 구현해야할 때 위와 같이 특정 Flag로 코드를 제어할 수 있게 한다.
#define Kp 10
void ATO(Kp)
{
AngleLpf(Kp);
}
위와 같이 Tunning이 필요한 값을 정의할 때, #define을 통해 정의하고 이를 관리하는 경우가 있다,
이러한 전처리문이 많이 들어가 있는 코드가 굉장히 많아지게 되면 실제로 코드 분석하기가 상당히 까다로울 수 있다. 이 경우에 전처리기 명령을 통해서 코드를 한 번 처리하면 분석하는데 매우 용이할 수 있다.
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'Embedded > Embedded SW 이야기' 카테고리의 다른 글
Compile 두번째 이야기 (0) | 2020.01.12 |
---|---|
Compile (0) | 2020.01.07 |
Embedded SW Design (0) | 2020.01.06 |