C++의 함수 포인터에 대한 Typedef

Muhammad Zohaib 2023년10월12일
  1. typedef 키워드
  2. 함수 포인터가 있는 typedef
C++의 함수 포인터에 대한 Typedef

이 기사에서는 C/C++에서 typedef의 목적을 설명합니다. 함수 포인터와 함께 typedef를 사용하는 방법과 이를 사용할 때의 이점에 대해 자세히 설명합니다.

먼저 typedef와 일반적인 용도에 대해 논의해 보겠습니다.

typedef 키워드

typedef는 유형 정의를 나타냅니다. 이름에서 알 수 있듯이 typedef는 기존 데이터 유형인 변수의 유형에 새 이름을 지정하는 방법입니다.

예를 들어 정수 변수를 저장하려는 경우 데이터 유형은 int가 됩니다. 유사하게 문자 또는 문자열 데이터 유형은 단어나 구문에 사용됩니다.

#include <iostream>
#include <string>
using namespace std;

int main() {
  int a = 10;
  string greeting = "Hello!";
  return 0;
}

typedef의 도움으로 사용되는 실제 유형에서 벗어나 변수가 의미하는 바에 대한 아이디어에 더 집중할 수 있습니다. 이렇게 하면 깨끗한 코드를 더 간단하게 작성할 수 있지만 코드 편집도 훨씬 간단해집니다.

예를 들어, 크리켓 경기 후 세 명의 다른 플레이어의 진술을 녹음하는 경우 typedef를 사용할 수 있습니다.

#include <iostream>
using namespace std;

int main() {
  typedef char* statement;
  statement PlayerA = "I played bad";
  statement PlayerB = "I played very well";
  statement PlayerC = " I could not get the chance to Bat";
  cout << "Player A said:" << PlayerA;
  return 0;
}

위의 코드에서 char*statement라는 새 이름으로 이 데이터 유형을 변경하기 위해 typedef 키워드를 적용한 문자 포인터입니다. 이 새로운 별칭은 플레이어의 진술을 기록하고 있기 때문에 이 경우에 더 의미가 있습니다.

따라서 typedef는 코드 가독성을 향상시킵니다.

typedef는 함수 포인터와 함께 사용할 수도 있습니다. 이에 뛰어들기 전에 함수 포인터에 대해 간단히 소개하겠습니다.

함수 포인터

C++에서 포인터는 변수의 메모리 주소를 보유하는 변수입니다. 마찬가지로 함수 포인터는 함수의 주소를 보유하는 포인터입니다.

다음 코드를 사용하여 함수 포인터를 선언할 수 있습니다.

int (*point_func)(int, int);

위의 코드에서 point_func는 두 개의 정수 변수를 인수로, int를 반환 유형으로 갖는 함수를 가리키는 포인터입니다.

함수 포인터가 있는 typedef

함수 포인터를 사용하는 typedef의 경우 구문이 이상하게 보입니다. 함수 포인터 선언의 시작 부분에 typedef 키워드만 넣으면 됩니다.

typedef int (*point_func)(int, int);

위 명령은 point_func(두 개의 int 인수를 사용하고 정수를 반환하는 함수 포인터, 즉 int (*) (int, int))라는 이름으로 새 유형을 정의했음을 의미합니다. 이제 포인터 선언에 이 새 이름을 사용할 수 있습니다.

다음 프로그래밍 예제를 살펴보겠습니다.

#include <iostream>
using namespace std;

int abc(int x1, int x2) { return (x1 * x2); }
int main() {
  typedef int (*pair_func)(int, int);
  pair_func PairProduct;  // PairProduct is pointer of type pair_func
  PairProduct = &abc;  // PairProduct pointer holds the address of function abc
  int product = (*PairProduct)(20, 5);
  cout << "The product of the pair is: " << product;
  return 0;
}

출력:

The product of the pair is: 100

함수 포인터 앞에 사용된 경우 typedef가 수행하는 작업은 여기까지 명확합니다. abc 함수는 두 개의 인수를 사용하고 위 코드에서 해당 제품을 반환합니다.

main 함수에서 typedef를 사용하여 함수 포인터(예: pair_func)의 새 이름을 정의했습니다. 그런 다음 pair_func 유형의 PairProduct를 정의하고 함수 abc 주소를 할당했습니다.

그런 다음 PairProduct 포인터를 역참조(간단한 구문)하고 두 개의 인수를 전달하여 abc 함수를 호출했습니다.