typedef
이름을 형식에 연결하는 언어 구문입니다.
예를 들어 원래 유형과 같은 방식으로 사용합니다.
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
그들을 사용하여
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
보시다시피, typedefed 이름을 위에 주어진 정의로 바꿀 수 있습니다 .
어려움은 C와 C ++에서 함수 구문과 가독성에 대한 포인터에 typedef
있으며 그러한 선언의 가독성을 향상시킬 수 있습니다. 그러나 다른 더 간단한 유형과 달리 함수는 반환 값과 매개 변수를 가질 수 있으므로 함수에 대한 포인터의 길고 복잡한 선언이있을 수 있으므로 구문이 적합합니다.
가독성은 함수 배열에 대한 포인터와 다른 간접적 인 특징으로 인해 까다로워지기 시작할 수 있습니다.
세 가지 질문에 대답하려면
왜 typedef가 사용됩니까?
코드를 쉽게 읽을 수 있도록-특히 함수 또는 구조 이름에 대한 포인터의 경우.
구문이 이상하게 보입니다 (함수 선언에 대한 포인터에서)
. 적어도 시작할 때 구문을 읽을 수 없습니다. 사용하여 typedef
선언 대신 읽기를 완화
함수의 메모리 주소를 저장하기 위해 함수 포인터가 생성 되었습니까?
예, 함수 포인터는 함수의 주소를 저장합니다. 이것은 typedef
프로그램의 쓰기 / 읽기를 용이하게하는 구성 과는 아무런 관련이 없습니다 . 컴파일러는 실제 코드를 컴파일하기 전에 typedef 정의를 확장합니다.
예:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456