박가방

[C++] 함수 본문

프로그램 언어/C++

[C++] 함수

박가방 2022. 8. 7. 10:26

1. 함수의 정의

함수란 특정기능을 독립적으로 수행하는 모듈화된 프로그램을 의미하며, 프로그램의 최소 단위이다.

컴파일러(Compiler)내 작성되는 main() 또한 함수이며, OS(Operating System)은 시작할 때 main 함수를 찾는다.

반환자료형 함수명(자료형 인수1, 자료형 인수 2)
{

함수몸체

}
int func (int x, int y)             
{



}
    

반환자료형(retrurn datatype) : 함수 기능을 마치고 반환할 데이터의 자료형을 결정한다.

함수명 : 함수의 이름을 정의한다.

인수(arguement) : 매개변수(parameter)라고도 불리며, 함수 호출(call) 시 넘겨받는 데이터를 저장하는 변수이다. 함수 내부에서만 사용가능한 지역변수(local variable)이다. 

 

 

C++ 함수는 반환값이 있는 함수와 없는 함수(void)로 나눌 수 있다.

- 반환값이 있는 함수는 호출될 경우 수행한 결과 값을 return 하며, 반환 값이 없는 함수의 경우 특정기능만 수행하도록 작성된다.

- 반환 타입은 배열을 제외한 모든타입이 가능하며, 만약 배열이 구조체나 객체에 포함될 경우 반환이 가능하다.

 

2. 함수의 선언 및 정의 순서

컴파일러는 main()함수부터 찾으므로, 함수 사용 시 선언 순서는 main 이전과 이후로 2가지로 나눌 수 있다.

 

2.1.  main함수 이전에  do_Sum 함수를 선언 및 정의 할 경우

#include <iostream>

int do_Sum(int x, int y) {                              //함수의 선언 및 정의, 가급적 자세히 적을 것

     return x + y;

}

int main() {
    using namespace std;

    int result = 0;
    result = do_Sum(3,4);
    cout << result << endl;

}

 

2.2. main함수 이전에 do_Sum 함수를 선언하고, 이후에 정의할 경우.

- 컴파일러는 main 함수부터 찾아작동하므로 main함수 이전에  do_Sum 함수를 사용하겠다고 선언해줘야한다.

#include <iostream>

int do_Sum(int x, int y);                           //함수의 선언

int main() {
    using namespace std;

    int result = 0;
    result = do_Sum(3,4);
    cout << result << endl;

}
int do_Sum(int x, int y) {                         // 함수의 정의

    return x + y;

}

 

 

 

2.3 함수 내 함수 정의는 가능한가?

# include <iostream>

using namespace std;


void printHelloWorld()
{
	cout << "Hello World" << endl;
}

int addTwoNumbers(int num_a, int num_b) 
{
	int sum = num_a + num_b;			// 출력값을 맞춰주기위해 int.
	printHelloWorld();			        //가능. 그러나 함수안에 함수정의는 허용X, 파이썬이나 가능
	return sum;
}


int main()

{
	cout << 1 + 2 << endl;
	cout << addTwoNumbers(1, 2) << endl;		//1,2 : argument
	printHelloWorld();
	return 0;

}

- 불가능함. 함수 내 함수 부름(call)은 가능.

 

3. 함수의 자료형

- 변환 자료형으로 함수의 결과 값을 반환하므로 입력 값 및 반환 값에 유의하여야 한다.

 

  3.1 인자 저장 값과 반환 값이 int형 이나, 입력값이 float형인 경우

    - main 함수에서 do_Sum의 인자 1,2 입력 값이 3.14, 4.56이다.

     - do_Sum 함수에서 저장되는 인자 1,2의 자료형은 int형 이므로 3과 4만 저장된다.

     - 따라서 결과는 7

#include <iostream>

int do_Sum(int x, int y);

int main() {
    using namespace std;

    float result = 0;
    result = do_Sum(3.14f,4.56f);                 //f는 컴파일러에게 float 값이라는 것을 알려주기 위함.
    cout << result << endl;

}

int do_Sum(int x, int y) {

    return x + y;

}
결과 : 7 

 

 

  3.2 인자 저장 값과 입력값이 float형 이나, 반환 값이 int형인 경우

   - 반환자료형이 int형이므로 결과는 7 

 

#include <iostream>

int do_Sum(float x, float y);

int main() {
    using namespace std;

    float result = 0;
    result = do_Sum(3.14f,4.56f);
    cout << result << endl;

}

int do_Sum(float x, float y) {

    return x + y;

}
결과 : 7

 

 

  3.3 반환 값, 인자 2 , 입력값  float 형 // 인자 1 int형

    - main 함수에서 do_Sum의 인자 1 입력 값이 3.14이다.

    - do_Sum 함수에서 저장되는 인자 1의 자료형은 int형 이므로 3만 저장된다.

    - 따라서 3+ 4.56 = 7.56

#include <iostream>

float do_Sum(int x, float y);

int main() {
    using namespace std;

    float result = 0;
    result = do_Sum(3.14f,4.56f);
    cout << result << endl;

}
float do_Sum(int x, float y) {

    return x + y;

}​
결과 : 7.56

3.4 return 뒤에 명령문(statement)를 작성할 경우.

-함수는 return문이 있을 경우 결과 값과 사용한 메모리를 반환하고 기능을 마무리한다.

#include <iostream>

int do_Sum(float x, float y);

int main() {
    using namespace std;

    float result = 0;
    result = do_Sum(3.14f,4.56f);
    cout << result << endl;

}
int do_Sum(float x, float y) {

    return x + y;
    std::cout<< "Hello world" << std::endl;
}
결과 : 7 Hellow world는 출력되지 않는다.

 

Reference
1: https://studymake.tistory.com/115
2: https://min-zero.tistory.com/25
3: 홍정모의 따라하며 배우는 C++