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
함수를 호출했습니다.