이이프
IeF 제멋대로 세상
이이프
전체 방문자
오늘
어제

공지사항

  • ✔ Info
  • 전체 글보기 (56)
    • 💻프로그래밍 내용 정리 (55)
      • C (0)
      • C++17 (55)
    • 💻게임메이커 (0)
    • 💻언리얼엔진 (0)
    • 💻유니티 (0)
    • 🎈[팀&자작]게임소개 (0)
    • 📃게임제작기술 (0)
    • 🎨그림놀이 (0)
    • 📒대학생활 (0)
    • 😃잡담 (1)
    • 🕹게임성과 (0)
    • 💷자격증 (0)

블로그 메뉴

  • 방명록

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
이이프

IeF 제멋대로 세상

💻프로그래밍 내용 정리/C++17

[C++ 1.1.9] 함수, 함수 선언, 함수 정의, 함수 리턴 타입 추론(auto), 현재 함수 이름(__func__)

2022. 8. 15. 20:53
728x90

함수

코드를 모두 main() 안에 담으면 관리하기가 힘들어진다.

프로그램의 가독성을 높이려면 함수 단위로 간결하게 나눠서 작성해야 한다.

 

C++에서 함수를 사용하려면 반드시 사용하려는 위치보다 앞에 선언해야 한다.

특정한 파일 안에서만 사용할 함수는 선언과 구현(정의)을 모두 소스 파일 안에 작성한다.

 

 


 

함수 선언

함수를 선언하는 문장을 함수 프로토타입(함수 원형) 또는 함수 헤더라 부른다.

함수의 내용은 보지 않고, 그 함수에 접근하는 방식만 표현한다는 의미가 강하다.

함수의 리턴 타입을 제외한 함수 이름과 매개변수 목록을 함수 시그니처(함수 서명)라고 부른다.

 

다음 코드는 함수를 선언하는 방법이다.

void myFunction(int i, char c);

리턴 타입을 void로 지정했는데, 이 함수는 호출한 측으로 리턴하는 값이 없다는 것을 의미한다.

하지만 이대로 실행하면 링크 과정에서 에러가 발생한다.

 

 


 

함수 정의

함수를 구현(정의)하는 방법은 다음과 같다.

void myFunction(int i, char c)
{
    std::cout << "the value of i is " << i << std::endl;
    std::cout << "the value of c is " << c << std::endl;
}

이제 다른 코드에서 인수 두 개를 지정하여 myFunction()을 호출할 수 있다.

myFunction(8, 'a');
myFunction(someInt, 'b');
myFunction(5, someChar);

 

함수는 당연히 호출한 측으로 값을 리턴할 수 있다.

예를 들어 두 수를 더한 결과를 리턴하려면 다음과 같이 작성한다.

int addNumbers(int number1, int number2)
{
    return number1 + number2;
}

이 함수를 호출하는 코드는 다음과 같이 작성한다.

int sum = addNumbers(5, 3);

 

 


 

함수 리턴 타입 추론 (auto)

C++14부터는 함수의 리턴 타입을 컴파일러가 알아서 지정할 수 있다.

이 기능을 적용하려면 다음과 같이 리턴 타입 자리에 auto 키워드를 적는다.

auto addNumbers(int number1, int number2)
{
    return number1 + number2;
}

그러면 컴파일러는 return 문에 나온 표현식의 타입에 따라 리턴 타입을 추론한다.

함수 안에 return 문이 여러 개가 있을 수 있는데, 이때 각 타입은 모두 같아야 한다.

 

 


 

현재 함수 이름 (__func__)

함수마다 내부적으로 __func__라는 로컬 변수가 정의돼 있다.

이 변수는 현재 함수의 이름을 값으로 갖고 있으며, 주로 로그를 남기는 데 활용한다.

int addNumbers(int number1, int number2)
{
    std::cout << "Entering function " << __func__ << std::endl;
    return number1 + number2;
}

'💻프로그래밍 내용 정리 > C++17' 카테고리의 다른 글

[C++ 1.1.11] std::array  (0) 2022.08.15
[C++ 1.1.10] C 스타일 배열, 영 초기화, 이니셜라이저 리스트, std::size(), sizeof  (0) 2022.08.15
[C++ 1.1.8] 논리 연산자(<, <=, >, >=, ==, !=, !, &&, ||), 단락 논리  (0) 2022.08.15
[C++ 1.1.7] 조건문(if/else/switch), 이니셜라이저, 폴스루(fallthrough), 조건 연산자  (0) 2022.08.15
[C++ 1.1.6] 상수와 타입(enum), 엄격한 타입(enum class(스트롱 타입)), 구조체(struct)  (0) 2022.08.15
    '💻프로그래밍 내용 정리/C++17' 카테고리의 다른 글
    • [C++ 1.1.11] std::array
    • [C++ 1.1.10] C 스타일 배열, 영 초기화, 이니셜라이저 리스트, std::size(), sizeof
    • [C++ 1.1.8] 논리 연산자(<, <=, >, >=, ==, !=, !, &&, ||), 단락 논리
    • [C++ 1.1.7] 조건문(if/else/switch), 이니셜라이저, 폴스루(fallthrough), 조건 연산자
    이이프
    이이프
    게임 프로그래머 지망생 / Since 2022.08.14

    티스토리툴바