본문 바로가기
코스웨어/14년 스마트컨트롤러

2014년 4월 16일 일일업무일지 김해성 [출번 9번]

by 알 수 없는 사용자 2014. 4. 16.
728x90
반응형

헤더파일로 분할 컴파일을 해봅시다.

헤더파일을 만들어봅시다.

source insight를 실행 후에 Project->New Project(만일 프로젝트가 열려있으면 Close Project하고  옆에 있는 대로 수행한다.)

그러고 나서 프로젝트 만들 폴더를 생성하고

만든 폴더안에 들어가서 주소를 복사한다.

다시 소스 인사이트에 와서 프로젝트 이름을 쓰고, 밑에 주소를 붙여넣는다. OK를 누르면

New Project Settings가 뜨는데 여기서 Browse클릭하고, 선택되어 있는 폴더의 상위폴더를 선택 후에

확인을 누른다.

그 다음에 OK를 누르면,

프로젝트에 추가 시킬 파일들이 나열되는데 해당되는 파일들을 선택한다.












헤더파일 사용 중복 방지를 위해서

아래 사진은 studio.h의 소스이다. 헤더파일 중복을 방지하기 위한 소스인데

같은 한쌍이다.

위 사진처럼 소스인사이트에서 studio.h와 같이 smart.h도 같이 써주었다.



조건부 컴파일을 위한 매크로


#if...#endif : 참이라면

if문이 조건부 실행을 위한 것이라면, #if...#endif는 조건부 코드 삽입을 위한 지시자이다.

ifendif.c

 


#ifdef...#endif : 정의되었다면

#if...#endif와 유사하다. #if는 매크로가 참이냐 거짓이냐를 기준으로 동작한다면, 

#ifdef는 매크로가 정의 되었느냐, 정의되지 않았느냐를 기준으로 동작.


ifdef.c


#else의 삽입 : #if, #ifdef, #ifndef에 해당


 

else.c


#elif의 삽입 : #if에만 해당

if문에 else if를 여러 번 추가할 수 있듯이, #if문에도 #elif를 여러 번 추가할 수 있다.


 

elif.c


ATMega LED 와리가리


 

main.c



 

 

 


 

LinkedList 함수화시키기


void Node_Printf(Node *)보다 typedef 구조가 먼저 선언 되었기 때문에

typedef~Node를 먼저 정의 해준다.


 

main2.c


 

Linked List의 분할 컴파일


분할 컴파일은 왜 하는가?

소스의 양이 많을 때 기능마다 따로 쓰이게 하기 위해서 분할 컴파일을 한다. 

main에서 짬뽕으로 섞인다. 대부분의 시간을 ~.c에서 ~.obj로 변환할 때 잡아먹기 때문에 

~.obj끼리 링크를 걸면 시간이 줄어들어서 분할 컴파일을 한다.

.lib는 .obj들이 모여있고 필요한 기능을 따로 뽑아낸다.


방법1

1. main.c -> main.obj = cmd에서 cl /c main.c

2. LinkedList.c -> LinkedList.obj = cmd에서 cl /c LinkedList.c

3. cl main.obj LinkedList.obj

방법2

1. main.c -> main.obj 

   LinkedList.c -> LinkedList.obj = cmd에서 cl *.c =>LinkedList.obj, main.obj...LinkedList.exe

방법3(가장 좋은 방법이다.)

1. main.c -> main.obj

   LinkedList.c -> LinkedList.obj = cmd에서 cl main.c LinkedList.c

=>main.obj, LinkedList.obj......main.exe 

 

LinkedList.c

LinkedList.h

main.c

전처리기와 사용자 정의 자료형 함수선언 등을 잘라낸다. 

오전에 배웠던 헤더파일 중복을 방지하는 코드를 이용하여 LinkedList.h 헤더파일의 #ifndef와 #endif 사이에 붙여넣는다.

main.c에서 전처리기를 포함시킨다.(#include "LinkedList.h")

밑에 함수들을 잘라낸다.

LinkedList.c 파일을 새로 만들어 LinkedList.h 전처리를 포함시킨 후 잘라낸 함수들을 붙여넣는다.

main.c가 한결 간결해진 모습을 볼 수 있다.

분할 컴파일은 여러 가지 방법이 있지만 아래의 방법이 가장 빠른 방법이란다.


매개변수의 결합과 문자열화

문자열 내에서는 매크로의 매개변수 치환이 발생하지 않는다.

 

 

macrostring.c

문자열 내에서 매크로의 매개변수 치환이 발생하게 만들기 : #연산자

 

macrostring1.c

특별한 매크로 연산자 없이 단순히 연결하는 것은 불가능하다.

 

 

univnum1.c

필요한 형태대로 단순하게 결합 : 매크로 ## 연산

 

univnum.c

 


나름대로 추린다고 추렸는데 정리가 잘 안되네요ㅋㅋ

부족한 부분있으면 말씀해주십시오~

728x90