C++ 언어의 함수는 크게 반환값이 있는 함수와 반환값이 없는 함수 두 가지로 나눌 수 있다. 반환값이 있는 함수는 함수가 호출(call)이 되어 뭔가 작업을 거친 후 호출한 위치로 그 기능을 수행한 결과 값을 다시 보낸다. 반환값이 없는 함수는 단순히 어떤 기능만 수행한다는 것을 의미한다.


예를 들어서 두 개의 입력 값을 받아서 더한 값을 돌려 주는 기능을 하는 함수를 생각해 보자. 이 때 입력되는 값은 ‘인자’(argument) 혹은 ‘매개변수’(parameter)라고 부른다. (이후에는 ‘인자’ 라는 명칭만을 사용할 것이다.) 계산 결과값(이 경우 더한 값)을 호출한 곳으로 되돌려주는 경우 이것을 ‘반환값’, ‘리턴값’이라고 한다.


  • 인자(argument) - 함수로 넘겨주는 데이터

  • 반환값(return value)  - 함수가 작업이 끝나고 넘겨주는 결과값


사용자 정의 함수는 문자 그대로 ‘사용자가 필요에 의해서 만드는 함수’를 의미한다. C++ 프로그램에서 함수를 사용하기 전에 반드시 정의를 해 주어야 한다. 함수의 정의 형식은 다음과 같다.


반환자료형 함수명(데이터형 인수1, 데이터형 인수2 ...) {
   함수 본체
}


예를 들면 다음과 같다.


void sayHi() {
   printf("Hi ");
   printf("all.");
}


이 함수의 이름은 sayHi()이다. 함수명 앞에는 이 함수의 반환 값의 데이터 형을 명시한다. 반환값이 없는 경우에는 명시적으로 void라는 키워드를 써야 한다. 이 함수는 인자가 없다. 이렇게 인자가 없는 경우 함수명 뒤에 그냥 빈 괄호를 입력한다. 괄호를 생략할 수 없음에 유의하자.


이렇게 정의된 함수는 다음과 같이 호출할 수 있다.


int main() {
   ...
   sayHi(); // sayHi()함수 호출
   ...
}


이것을 합하여 완전한 프로그램으로 만들면 다음과 같다.


#include <stdio.h>

void sayHi()
{
   printf("Hi ");
   printf("all.");
}

int main(int argc, char **argv)
{
  sayHi();
}


Hi all.


이 프로그램을 보면 sayHi() 함수와 main() 두 개의 함수가 있다. 이 예제가 실행될 때는 항상 main()함수를 실행시키며 main()함수가 종료되면 프로그램도 종료된다. C++ 언어는 항상 main()함수를 제일 먼저 실행시킨다.


또 다른 함수의 예를 들어보자.


void sayHello(int in)
{
   for(;in>0;in--) {
       printf(“Hello.\n”);
   }
}


이 함수는 반환값이 없으며 인자를 하나 받는 함수이다. 그렇게 받은 인자의 개수만큼 “Hello.”를 반복해서 출력하는 일을 한다. 이것으로 완전한 프로그램을 만들어 보면 다음과 같다.


#include <stdio.h>

void sayHello(int in)
{
   for(;in>0; in--){
       printf("Hello. ");
   }
}

int main(int argc, char **argv)
{
   sayHello(3);
   int ia = 5;
   sayHello(ia);
}


Hello. Hello. Hello.
Hello. Hello. Hello. Hello. Hello.


main()함수 내에서 sayHello()함수를 두 번 호출했다. sayHello(3)이라고 호출하면 3이라는 정수형 값이 sayHello(int in) 의 인자 in에 저장된 후 함수가 수행된다. 따라서 “Hello.”라는 문자열이 3번 출력된 것이다. 마찬가지로 두 번째 호출인 sayHello(ia) 는 ia의 값은 5를 이 함수의 인자 in에 전달한다. 그러므로 “Hello.”가 다섯 번 출력 된다.


다른 예로 이번에는 반환값이 있는 함수를 들어보자.


float add(float fa, float fb) {
   float fc = fa + fb;
   return fc;
}


이 함수는 반환값의 자료형이 float형이라고 함수명 앞에 명시되어 있다. 인자(argument)는 두 개이고(fa, fb) 모두 float 형이다. 함수 본체에 보면 변수 fc에 두 인자의 합을 저장한 후 return 명령어를 이용하여 그 값을 반환하고 있다. 따라서 이 함수는 두 실수를 받아서 그 합을 반환하는 함수이다.


이와 같이 반환값이 있는 함수의 경우 호출부에서는 그 반환값을 변수에 저장할 수 있다. 예를 들어 다음과 같다.


float fr;
fr = add(1.0f, 2.5f);//fr에 3.5 저장

float fa = 10.1f, fb = 22.3f;
float fc = add(fa, fb);// fc에 32.3이 저장됨


이와 같이 반환값이 있는 함수의 경우는 호출부에서 그 반환값을 받아서 변수에 저장할 수 있다.


#include <stdio.h>

float add(float fa, float fb) {
   float fc = fa + fb;
   return fc;
}

int main(int argc, char **argv) {
   float fr;
   fr = add(1.0f, 2.5f);
   float fa = 12.3f, fb = 45.6f;
   float fc = add(fa, fb);
   printf("fr = %f, fc = %f", fr, fc);
}


fa = 3.500000, fb = 57.899998


 좀 더 다양한 함수의 정의 예를 다음 표에 들었다.


함수 정의 예

의미

void nop() {... }

반환값이 없음을 명시적으로 나타냄

int sub(int ia, int ib) {...}

두 개의 int형 입력, 반환값도 int형

double round(double dx) {...}

하나의 double형입력, 출력도 double형

void myDate(void) {... }

인자가 없음을 명시적으로 나타냄.

char display(char ca) {...}

하나의 char형입력, 출력도 char형


여기에서는 함수의 기본적인 정의 방법에 대해서 살펴 보았다.


C++ 강좌 전체 목록 >>>


c{c++},n{c0025}

'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

C++ 의 return 명령어  (0) 2015.05.18
C++ 사용자 함수의 선언  (0) 2015.05.17
C/C++ 함수(function) 개요  (0) 2015.05.17
C++ 클래스 예제 : Led 클래스  (0) 2015.05.17
C++의 생성자와 소멸자 실행 순서  (0) 2015.05.17
Posted by 살레시오
,

7.1 함수의 개요      [gdoc]       [smts]

 C 언어는 구조 지향 언어(structure-oriented language)라고 한다. 이 구조의 핵심으로 함수(function)가 있는데 C 언어는 함수로 시작해서 함수로 끝난다고 해도 과언이 아닐 정도이다. C++언어는 객체 지향(object-oriented) 언어이지만 C언어와의 하위 호환성을 유지하므로 구조 지향적인 프로그래밍도 가능하다.


 C 프로그램은 하나 이상의 함수들로 구성되어 있으며 각 함수들은 다양한 일들을 수행할 수 있는 독립적인(self-containted) 부프로그램을 일컫는다. 전술했듯이 C++ 의 경우 C 언어에 대해서 하위 호환성이 있으므로 함수에 대한 기본적인 내용을 똑같이 적용된다.


 함수는 식별자 뒤에 괄호()가 반드시 붙는다. 괄호가 붙지 않는 식별자는 변수이며 괄호가 붙은 식별자는 함수이다. 맨 처음부터 다뤄온 예제들에서 프로그램 본체인 main() 도 바로 함수이다. 그리고 scanf(), printf() 도 함수이다.


  • main() 함수 : C 프로그램의 시작점

  • scanf(), printf() 함수: 입출력 함수


 특히 C 언어는 함수에 의한 언어라고 할 수 있다. 아무리 덩치가 큰 C 프로그램이라도 모두 함수를 조합하여 만들어진다. 함수의 사전적인 의미는 ‘기능’이다. 즉 ‘어떤 일을 수행하는 프로그램의 작은 단위’를 함수라고 한다.


  • 함수(function) - 어떤 작업을 수행하는 프로그램의 작은 단위


 프로그래밍 입문자는 왜 하나의 프로그램을 여러 개의 함수로 나누어 작성해야 되는지 궁금할 수 있다. 함수를 사용하는 장점으로 다음과 같은 것들을 들 수 있다.


  1. 덩치가 큰 프로그램을 작고 다루기 쉬운 함수(모듈) 단위로 분할해서 설계하고 구현함으로서 프로그램을 더 쉽게 작성할 수 있다.

  2. 프로그램을 단계적으로 개발할 수 있다.

  3. 어떤 프로그램에서 작성한 함수를 다른 프로그램에서 재사용할 수 있다.

  4. 프로그램 내부에 세부적인 연산이나 작업 등을 함수의 내부에 숨길 수 있어 프로그램을 보기에 간결하게 만들 수 있다.


 C 언어의 함수는 이미 만들어져서 사용할 수 있는 표준 함수와 사용자가 만들어 사용하는 사용자 정의 함수로 구분할 수 있다.


  • 표준 함수 (standard function)

  • 사용자 정의 함수 (user-defined function)


지금까지 사용했던 scanf(), printf() 함수는 모두 표준 함수에 속하며 C/C++ 언어 표준에 포함되어 일반 사용자가 가져다 쓸 수 있는 이미 만들어진 함수이다.


 표준 함수와 사용자 정의 함수를 프로그램 내에서 적절하게 활용하면 중복되는 부분을 상당히 줄일 수가 있으며 프로그램의 크기도 줄일 수 있는 효과를 얻을 수 있다. 덩치가 큰 프로그램을 제작할 때 작은 크기의 모듈을 설계하여 전체를 짜 맞추는 식으로 만들어 가면 개발 시간을 단축할 수 있고 프로그램을 보다 명료하게 구현할 수 있다는 장점이 있다.


Posted by 살레시오
,

아두이노 기초 

교재 링크


1장 아두이노 개요

    1.1 아두이노 소개

    1.2 아두이노의 종류 및 특징


3장 시리얼(serial) 통신

    3.1 시리얼 통신 개요

    3.2 시리얼 통신 예제들

    3.2 시리얼 통신으로 (3핀)초음파 센서를 이용한 거리 측정값 표시하기
    3.3 4핀 초음파 센서와 NewPing 라이브러리로 거리 측정하기

    3.4 초음파 센서로 근접 장애물 경고하기


4장 인터럽트(interrupt)

    4.1 인터럽트의 개념

    4.2 터치센서를 이용한 인터럽트 실험

    4.3 택스위치와 디바운싱 (falling edge) (part 1/2)

    4.4 디바운싱 (rising edge, changing edge, low state) (part 2/2)

    4.5 volatile 지시자


5장 아날로그 입력

    5.1 날로그핀(AD변환기) 개요

    5.2 아날로그핀의 기준 전압 설정

    5.3 아날로그핀을 디지털 핀으로 사용하는 방법

    5.4 온도 센서를 이용한 아날로그 입력 실험

    5.5 광량 센서를 이용한 아날로그 입력 실험



아두이노 응용 





'주제별 글목록' 카테고리의 다른 글

심파이(sympy) 강좌 목록  (0) 2015.06.03
파이썬(python) 기초 강좌 목록  (1) 2015.05.23
ATmega8(A) 강좌 목록  (1) 2015.05.16
리눅스(Linux) 강좌 목차  (2) 2015.05.16
C++ 강의 글 목록 (목차)  (2) 2015.04.21
Posted by 살레시오
,