728x90
반응형
CC=gcc RM=rm -rf OUTPUT = main BOOK_NAME=30 MSG_LINK = linking... MSG_END = compile complete... MSG_BOOK_START = book.c comile... MSG_BOOK_END = book.c compile end... MSG_MAIN_START = main.c compile... MSG_MAIN_END = main.c compile end... MSG_BEGIN = ------- begin ------- MSG_END = ------- end ------- all: begin book main build end rebuild: clean all build: @echo $(MSG_LINK) @$(CC) -o $(OUTPUT) main.o book.o book: @echo $(MSG_BOOK_START) @$(CC) -DBNAME_LEN=$(BOOK_NAME) -c book.c @echo $(MSG_BOOK_END) @echo main: @echo $(MSG_MAIN_START) @$(CC) -DBNAME_LEN=$(BOOK_NAME) -c main.c @echo $(MSG_MAIN_END) @echo begin: @echo @echo $(MSG_BEGIN) end: @echo $(MSG_END) @echo clean: $(RM) main.o $(RM) book.o $(RM) $(OUTPUT)
<출력결과>
위와 같이 makefile을 수정하면 ATMega에서 보았던 makefile을 내가 만들 수 있다. (대박!)
<추가설명>
@echo는 printf와 같다고 할 수 있다.
$(MSG_LINK)는 'linking...'로 출력된다.
@$(CC) -o $(OUTPUT) main.o book.o는 @echo가 없기 때문에 화면에 출력되지 않는다.
$(CC)는 gcc, $(OUTPUT)은 main을 뜻한다.
gcc -o main main.o book.o 는 main.o, book.o 파일을 main으로 합친다.
$(MSG_BOOK_START)는 'book.c compile...'로 출력된다.
$(MSG_BOOK_END)는 'book.c compile end...'로 출력된다.
$(MSG_MAIN_START)은 'main.c compile...'로 출력된다.
$(MSG_MAIN_END)은 'main.c compile end...'로 출력된다.
$(MSG_BEGIN)은 '------- begin -------'로 출력된다.
$(MSG_END)은 '------- end -------'로 출력된다.
$(RM)은 'rm -rf'을 뜻한다.
$(OUTPUT)은 'main'을 뜻한다.
그리고 대망의 구조체를 이용한 간단한? 도서관 프로그래밍 ㅠㅠ
#include "book.h" static Book * Head; void Book_Insert() { Book * temp = malloc(sizeof(Book)); Book * com; Book * pos; if(0==temp) { printf("No free memory \n"); return ; } printf("Book Name: \n"); fgets(temp->caName, BNAME_LEN, stdin); temp-> caName[strlen(temp-> caName)-1]=0; printf("Publication: \n"); fgets(temp->caPub, BPUB_LEN, stdin); temp-> caPub[strlen(temp-> caPub)-1]=0; printf("Book Price: \n"); scanf("%d", &(temp-> uiPri)); while(getchar() != '\n'); //searching... pos=Head; com=Head; //중간에 연결리스트 앞을 찾기위해 필요하다. while(pos!=0) { //비교문 필요 if(0<strcmp(pos-> caName, temp-> caName)) { break; } com=pos; pos=pos->Next; } if(Head==0) //연결 리스트가 존재하지 않을 경우 첫번째 { temp-> Next=Head; Head=temp; } else //중간, 끝 삽입. { if(Head==pos)//제일 앞이면 { temp-> Next=pos; Head=temp; } else { temp-> Next=pos; com-> Next=temp; } } } void Book_Print() { printf("===================== \n"); printf(" Book List \n"); while(0!=Head) { printf("--------------------- \n"); printf("Book Name: [%s] \n", Head-> caName); printf("Publication: [%s] \n", Head-> caPub); printf("Book Price: [%d] \n", Head-> uiPri); Head = Head -> Next; } printf("==================== \n"); } void Book_Free() { Book *temp; while(0!=Head) { temp=Head; Head=temp-> Next; free(temp); } }
<출력결과>
컴파일 끝
입력 결과
이어서 위 프로그래밍의 구조체가 어떻게 작동하는지에 대해서 그림을 그려보았습니다...
제가 정확히 이해하지 못하고 있기 때문에 잘못된 점이 있다면 지적 부탁드립니다.
728x90
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
2016-04-14_조재찬_업무일지_네트워크:소켓 (0) | 2016.04.15 |
---|---|
20160405-업무일지-허도경-로봇제어-시리얼제어 (0) | 2016.04.14 |
비주얼 스튜디오 패키지 오류 삽질기... (0) | 2016.04.13 |
20160405_조재찬_업무일지_포인터와 배열 (0) | 2016.04.12 |
20160408_장진웅_업무일지_공장내 Network_네트워크 기초 (0) | 2016.04.11 |
20160407_장진웅_업무일지_로봇제어_시리얼제어4 (0) | 2016.04.11 |
20160406_김도관_업무일지_C언어기초_02 (0) | 2016.04.11 |
20160410_김가연_스터디일지_구조체 변수의 연산+gets puts 함수 정리 (1) | 2016.04.10 |