메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
조회 수 16,177 추천 수 1 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?

단축키

Prev이전 문서

Next다음 문서

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?
  • WhiteAT 2008.01.14 21:33

    전에 문제가 되었던 것은 잘 해결이 되었나요^^?

    크게 2가지 방법이 있습니다. (다른방법이 있다면 다른 방법을 사용하면 되겠죠?)
    (예를 들어 함수 f1, f2,f3 함수 3개가 있다고 할때...)

    1. 전역변수로 사용 (함수의 인자를 사용하지 않고)
    int f1_timer;
    int f2_timer;
    int f3_timer;

    void op_f1(){ if(f1_timer>0) return;   }
    void op_f2(){ if(f2_timer>0) return;   }
    void op_f3(){ if(f3_timer>0) return;   }

    2. 전역변수로 사용 (함수의 인자로 전달)
    void op_f1(&timer){ if(timer>0) return;   }
    void op_f2(&timer){ if(timer>0) return;   }
    void op_f3(&timer){ if(timer>0) return;   }


    함수 인자로 포인터를 사용하는 이유는 함수 내에서도 전달된 인자값이 변경되기 때문입니다.
    예를 들어 아래처럼 했을 때는 timer 값이 함수 내에서 timer 값이  변경되면, 함수내에서만 적용됩니다.
    void op_f1(timer){ if(timer>0) return;   } 
    그 이유 때문에 포인터를 사용하는 겁니다.





    1번과 2번이 크게 차이가 없어 보이지만,  (비슷한 일을 할 경우)엄청난 차이가 있는 경우가 있습니다.
    예를 들어, 키 8개 led 8개가 있고,  눌러진 키의 번호에 해당하는 LED 를 ON 하려고 할때

    1번 방법으로 한다면.
    void op_f1(){ if(f1_timer>0) return;  // led 처리 }
    void op_f2(){ if(f2_timer>0) return; // led 처리 }
    void op_f3(){ if(f3_timer>0) return;  // led 처리 }
    void op_f4(){ if(f4_timer>0) return;  // led 처리 }
    void op_f5(){ if(f5_timer>0) return;   // led 처리 }
    void op_f6(){ if(f6_timer>0) return;   // led 처리 }
    void op_f7(){ if(f7_timer>0) return;   // led 처리 }
    void op_f8(){ if(f8_timer>0) return;   // led 처리 }
    로 선언이 되고  메인에서는
    op_f1();op_f2();op_f3();op_f4();op_f5();op_f6();op_f7();op_f8();
    가 되겠죠?

    2번 방법인 경우.
    void op_f1(&timer) if( *timer>0) return;  // led 처리 }  // 하나의 함수만 선언하면 되고,
    메인에서는
    op_f1(&timer1);
    op_f1(&timer2);
    op_f1(&timer3);..................식으로 사용될 것입니다.


    이 예제는 간단한 예제이지만 관련된 변수가 많아지고 op_f1내의 함수 기능이 많아지면, 수정하기와 디버깅 하는데 엄청난 차이가 생깁니다...


    전달받은 인자가 함수내에서 값이 변경되고 또 그 값을 돌려 줘야 한다면 call-by-reference를 사용하거나  전역변수를 사용해야 하고,
    인자값을 받아서 사용만 하려면 call-by-value 로 사용하면 됩니다.

    전달인자의 크기가 작을 때는 call-by-reference 방식이 속도가 빠르지만 전달인자의 크기가 커지면 속도의 차이는 크지 않습니다.
    그리고 call-by-reference는 주소공간을 줄인다는 장점이 있구요..

  • 러빙유 2008.01.14 22:13
    아. 그렇군요...많은 도움이 되고 있습니다. 한번 또 머리를 돌려 봐야 되겠네요..^^

    네, 많이 도와 주신 덕분에 그럭저럭 해결이 되었습니다.^^'..  그런데, WHILE(1) 안에, 아직 넣어주어야 할 것들이 많아서

    넣어보면서 타이머 값을 조절할 일이 좀 남아 있죠^^.  감사합니다.

  1. VC++ RS232C통신 및 Log data 수집

    Date2009.04.04 Category :일반 Reply1
    Read More
  2. [MFC]키보드 입력 관련 질문입니다.

    Date2009.02.03 Category :일반 Reply1
    Read More
  3. 어제 테트리스에 댓글 달았던 학생입니다

    Date2008.12.13 Category :일반 Reply2
    Read More
  4. 테트리스 소스에 대한 질문이있습니다.

    Date2008.12.12 Category :일반 Reply1
    Read More
  5. 기술자료실에 127번 글에서 질문있습니다..

    Date2008.12.01 Category :일반 Reply1
    Read More
  6. 문제 답변 쫌 부탁드려요~ ^^

    Date2008.11.09 Category :일반
    Read More
  7. 조언 부탁드립니다. 필드에서 지적 받은건데요..

    Date2008.06.13 Category :일반
    Read More
  8. c++구조체와 함수를사용해서 성적표만들기2

    Date2008.05.29 Category :일반 Reply1
    Read More
  9. c++구조체와 함수를사용해서 성적표만들기

    Date2008.05.29 Category :일반 Reply1
    Read More
  10. mfc 테트리스 질문이요~

    Date2008.05.15 Category :일반 Reply1
    Read More
  11. RS485 통신 방법

    Date2008.01.22 Category :일반 Reply3
    Read More
  12. 함수인자를 구조체 변수나 구조체 주소로 받는 것.

    Date2008.01.14 Category :일반 Reply2
    Read More
  13. 인터럽트 루틴을 메인으로 빼고자 하는데 가능할 지요?

    Date2008.01.09 Category :일반 Reply12
    Read More
  14. LED 깜빡 거림.

    Date2008.01.08 Category :일반 Reply8
    Read More
  15. IAR 컴파일러 환경에서 AVR128 Timer1 인터럽터 구현이 안되요..

    Date2008.01.04 Category :일반 Reply2
    Read More
목록
Board Pagination Prev 1 2 3 4 Next
/ 4