본문으로 바로가기

[C/C++] 함수 Function 下

category Theory/Lecture 2009.10.18 16:17

본 자료는 국립 창원대학교 메카트로닉스 공학부 학생을 대상으로 한 컴퓨터 언어 응용 수업 자료입니다. 본 자료는 수업의 교재인 (핵심요약판) C++로 시작하는 객체지향 프로그래밍 (Y. Daniel Liang 저, 권기형 / 김응성 공역) 의 내용을 재구성한 것으로 수업보조 자료 이외의 목적이 없음을 알립니다.


다른 프로그램에서 함수의 재사용
이미 작성된 함수를 다른 프로그램에서 불러올수 있다면 여러가지로 편할 것입니다. 그 방법중 하나를 이야기해보겠습니다.

 
위에 보면 8번 9번행에서 isEven이라는 함수를 사용하고 있습니다. 짝수인지 아닌지를 확인하는 역활을 하는 함수인데요. 위에 2번행에 보면 MyLib.h라는 (확장명이 h이면 header화일이라는 뜻입니다.) 화일이 include되어있는것을 확인할 수 있습니다.

 
그 내용은 위와 같은데요. 짝수인지 아닌지만 확인 할 것이기 때문에 bool 데이터 유형을 return하도록 되어있네요.  위와 같이 하면 다른 프로그램에서도 isEven을 include시켜서용해주면 됩니다. 그러면 Dev C++에서는 어떻게 헤더화일을 추가하는지 보겠습니다.


프로젝트 관리창에서 프로젝트이름에서 마우스 오른쪽 버튼을 누르면 나타나는 팝업창에서 유닛추가를 선택합니다. 그러면 직접 화일을 작성할 수 있구요. 프로젝트에 추가를 하면 기존에 작성된 화일을 추가할 수 있습니다.


임의의 문자 생성
rand()라는 함수가 있는데, 임임의 수를 만들어주는 함수입니다. 이를 이용해서 임의의 문자를 만들 수 있는데요.

 
위 첫 줄은 0-9사이의 숫자를 생성하는 것입니다. (10으로 나눈 나머지만 취하니까) 두번째 줄은 50부터 99사이의 숫자를 랜덤하게 생성하는 것입니다. 이렇게 생각하면

 
어떤 범위 a부터 b까지의 숫자를 랜덤하게 생성하고 싶을 때는 위와같이 사용하면 되겠네요. 


아,.. rand()를 사용할때는 cstdlib을 꼭 include 시켜주시구요.
#include <cstdlib>
using namespace std;

// Generate a random character between ch1 and ch2
char getRandomCharacter(char ch1, char ch2)
{
  return static_cast<char>(ch1 + std::rand() % (ch2 - ch1 + 1));
}

// Generate a random lowercase letter
char getRandomLowerCaseLetter()
{
  return getRandomCharacter('a', 'z');
}

// Generate a random uppercase letter
char getRandomUpperCaseLetter()
{
  return getRandomCharacter('A', 'Z');
}

// Generate a random digit character
char getRandomDigitCharacter()
{
  return getRandomCharacter('0', '9');
}

// Generate a random character
char getRandomCharacter()
{
  return getRandomCharacter(0, 127);
}

위 예제는 그렇게 만들어진 것을 함수로 한번 꾸며본것입니다. 살짝 분석해보세요^^

변수의 범위


어떤 함수의 내부에서 사용한 변수는 그 함수의 사용이 종료되면 없어진다는 것을 알고있습니다. for문도 마찬가지 인데요. for 문 안에서 사용한 변수 i와 j의 사용범위를 위에서 표시했습니다.

 
그러므로 위의 그림처럼 연달아 사용한 for문이 같은 변수 i를 가져도 문제가 없는 것이지요. 그러나

 
위에서처럼 중북사용은 피해야합니다.  

정적 지역 변수
위에서 이야기했드시... 함수의 사용과 함께 소멸되는 함수내의 변수를 지역변수라고 하는 데요.

 
그와 같은 상황을 꼭 피하고 싶다면 정적지역변수(static)를 사용하면 됩니다.

 
그 실행결과를 보면 x의 저장된 값이 소멸되지 않고 업데이트 되었다는 것을 확인할 수 있습니다. 


마지막으로 함수는

 
위 그림처럼 직접사용자에게 그 내용은 그냥 BlackBox처럼 보이게 하겠다는 것인데요. 이처럼 함수를 사용한다는 것은

 
위와 같은 장점을 가집니다.

마지막으로 많이 쓰는 math함수를 열거합니다.



참고자료

[2009] 05-2.pdf




댓글을 달아 주세요

  1. BlogIcon 라라윈 2009.10.19 15:40 신고

    C 언어 배워보고 싶은데...
    혼자 하려면 어렵겠죠....?

    • BlogIcon PinkWink 2009.10.20 00:23 신고

      아니요... 안그래요...
      블로그같은 곳만 참조해서 공부하셔도 충분하지 않을까하는데요... 사소한 어떤것들이 좀 걸릴수도 있으니...
      책한권 필요할진 모르지만요^^

    • BlogIcon 라라윈 2009.10.20 11:18 신고

      아주 오래전에 사 둔 터보 C 책은 한 권 있는데...
      이걸로도 될까요..? ^^;;;

    • BlogIcon PinkWink 2009.10.20 13:36 신고

      네... 괜찮습니다...
      실습해보실 컴파일러로는 Dev C++을 사용하세요.. 무료고
      윈도환경에서도 괜찮습니다.
      DEV C++ 설치법 정도로 검색해보시면 상당히 많은 블로그를 만날수 있습니다^^

    • BlogIcon 라라윈 2009.10.21 00:33 신고

      pinkwink님~ 자세히 알려주셔서 정말 감사해요~ ^^

    • BlogIcon PinkWink 2009.10.21 05:00 신고

      헉... 감사를 받을정도로 자세한건 아닌데....ㅜ.ㅜ
      혹시 반어법인건가요?ㅋㅋㅋ
      도움이 되었으면 좋겠습니다.

  2. 울랄라 2010.05.30 15:52 신고

    a에서 b까지가 아니라
    a에서 a+b-1까지 아니에요?

  3. Dev++ 2010.06.12 12:56 신고

    Dev++ 쓰시는 군여 앞으로 친하게 지내야 하겠는데여. 저기위에 xrand 있잔아여 scale factor 어떻게 계산 하셨나여 저하고는 틀리게 하시는듯. 저는 보통 (max-min+1)을 쓰는데여 그리고 님이 걸어놓은 <cmath>보통 함수에서는 integer abs() 하나고 나머지는 전부 64bits (double,double) 아닌가여?
    함수는 머리 아퍼여

    • BlogIcon PinkWink 2010.06.12 13:32 신고

      아.. 보통 그렇게 사용하나요?? 전 누군가에거 C를 배운적이 없어요. 그저 필요한 만큼만 사용해오다가, (주로 임베디드 분야에서...) 당시 학교내 C 강의를 하나 하게 되어서 급하게 교재를 선전해서 만들었던 자료입니다. 일반적으로 어떻게 사용하면 되는지까지는 잘 모르구요^^.

      a부터 b-1까지의 범위를 주고싶다는 생각에 부합되게끔 한 것 뿐이지요^^

      그러니, a 에서 rand()로 생성된 값을 b로 나눈 나머지 (b를 넘지 않을테니..) 그걸 더해줘서 구한 것입니다.

      그리고, 마지막 표는 bit에 대해서는 조사하지 않고 그냥 올렸네요..ㅠㅠ ㅎㅎㅎ