타이페프의 용도는 무엇인가?
C에서 typeef 키워드의 용도는 무엇인가? 언제 필요한가?
typedef
어떤 것을 유형으로 정의하기 위한 것이다.예를 들어,
typedef struct {
int a;
int b;
} THINGY;
...의 명사양하다.THINGY
주어진 구조대로이렇게 하면 다음과 같이 사용할 수 있다.
THINGY t;
...다음보다 높음:
struct _THINGY_STRUCT {
int a;
int b;
};
struct _THINGY_STRUCT t;
...그건 좀 더 장황하다.타이핑은 어떤 것들을 극적으로 더 선명하게 만들 수 있고, 특히 기능에 대한 포인터가 될 수 있다.
위키백과에서:
typedef는 C와 C++ 프로그래밍 언어의 키워드다.typef의 목적은 기존 형식에 대체 이름을 할당하는 것이다. 대부분의 경우 표준 선언이 번거롭거나 혼동될 가능성이 있거나 구현마다 다를 가능성이 있는 형식이다.
그리고:
K&R은 타이페프를 사용하는 두 가지 이유가 있다고 말한다.첫째로, 그것은 프로그램을 좀더 휴대할 수 있게 하는 수단을 제공한다.프로그램의 원본 파일 전체에 나타나는 모든 곳에서 유형을 변경해야 하는 대신, 한 개의 typef 문만 변경하면 된다.둘째, 타이페프는 복잡한 선언문을 이해하기 쉽게 만들 수 있다.
그리고 다음과 같은 주장에 반대한다.
그(Greg K.H.)는 이러한 관행이 불필요하게 코드를 난독화시킬 뿐만 아니라, 프로그래머들이 단순한 유형이라고 생각하는 대형 구조물을 실수로 오용하게 할 수도 있다고 주장한다.
다음 예에서 typedef의 사용에 대해 설명하십시오.또한, Typedef는 코드를 더 쉽게 읽을 수 있도록 하기 위해 사용된다.
#include <stdio.h>
#include <math.h>
/*
To define a new type name with typedef, follow these steps:
1. Write the statement as if a variable of the desired type were being declared.
2. Where the name of the declared variable would normally appear, substitute the new type name.
3. In front of everything, place the keyword typedef.
*/
// typedef a primitive data type
typedef double distance;
// typedef struct
typedef struct{
int x;
int y;
} point;
//typedef an array
typedef point points[100];
points ps = {0}; // ps is an array of 100 point
// typedef a function
typedef distance (*distanceFun_p)(point,point) ; // TYPE_DEF distanceFun_p TO BE int (*distanceFun_p)(point,point)
// prototype a function
distance findDistance(point, point);
int main(int argc, char const *argv[])
{
// delcare a function pointer
distanceFun_p func_p;
// initialize the function pointer with a function address
func_p = findDistance;
// initialize two point variables
point p1 = {0,0} , p2 = {1,1};
// call the function through the pointer
distance d = func_p(p1,p2);
printf("the distance is %f\n", d );
return 0;
}
distance findDistance(point p1, point p2)
{
distance xdiff = p1.x - p2.x;
distance ydiff = p1.y - p2.y;
return sqrt( (xdiff * xdiff) + (ydiff * ydiff) );
} In front of everything, place the keyword typedef.
*/
Typef는 기존 유형에 대한 별칭을 만드는 데 사용된다.그것은 다소 잘못된 표현이다: 새로운 타입이 기본 타입과 교환할 수 있기 때문에 타입에프는 새로운 타입을 정의하지 않는다.기본 유형이 변경될 수 있거나 중요하지 않은 경우, 인터페이스 정의에서 명확성과 휴대성을 위해 타이핑에프(typeef)가 종종 사용된다.
예를 들면 다음과 같다.
// Possibly useful in POSIX:
typedef int filedescriptor_t;
// Define a struct foo and then give it a typedef...
struct foo { int i; };
typedef struct foo foo_t;
// ...or just define everything in one go.
typedef struct bar { int i; } bar_t;
// Typedef is very, very useful with function pointers:
typedef int (*CompareFunction)(char const *, char const *);
CompareFunction c = strcmp;
타이페프는 이름 없는 타입에 이름을 붙이는 데도 사용할 수 있다.이러한 경우, typef는 해당 유형의 유일한 이름이 될 것이다.
typedef struct { int i; } data_t;
typedef enum { YES, NO, FILE_NOT_FOUND } return_code_t;
명명 규칙은 서로 다르다.보통은 a를 사용하는 것이 좋다.trailing_underscore_and_t
또는CamelCase
.
typedef unsigned char BYTE;
이 형식 정의 후에 식별자 BYT는 예를 들어 서명되지 않은 문자 유형의 약어로 사용될 수 있다.
바이트 b1, b2;
typetef는 새로운 타입을 소개하지 않지만 그것은 타입의 새로운 이름만 제공한다.
TYPEDEF
다음 용도로 사용 가능:
배열, 구조, 포인터 또는 함수를 결합하는 유형.
휴대성을 용이하게 하기 위해서,
typedef
네ga는 는다 코드를 다른 때그런 다음 코드를 다른 플랫폼에 포팅할 때 typef에서만 변경하여 올바른 유형을 선택하십시오.A
typedef
복잡한 유형의 캐스팅에 간단한 이름을 제공할 수 있다.typedef
또한 이름 없는 종류에 이름을 붙이는 데 사용될 수 있다.이러한 경우 해당 유형의 이름은 typedef가 유일하다.
참고:-사용해서는 안 함TYPEDEF
구조체 포함. 필요하지 않더라도 항상 구조 정의의 태그를 사용하십시오.
위키피디아 출처:"K&R은 타이페프를 사용하는 데는 두 가지 이유가 있다고 말한다.첫째... 둘째, 타이핑을 하면 복잡한 선언문을 이해하기 쉽게 만들 수 있다."
복합형(복합형은 K&R "The C programming language 2판 136에서 취함)을 단순화하면서 타이페프를 사용하는 두 번째 이유의 예를 들어보자.
char (*(*x())[])()
x는 포인터 배열[]에 포인터를 돌려 기능 리턴 문자(Return char)로 보내는 함수다.
우리는 타자기를 사용하여 위의 선언문을 이해할 수 있게 할 수 있다.아래 예제를 참조하십시오.
typedef char (*pfType)(); // pf is the type of pointer to function returning
// char
typedef pfType pArrType[2]; // pArr is the type of array of pointers to
// functions returning char
char charf()
{ return('b');
}
pArrType pArr={charf,charf};
pfType *FinalF() // f is a function returning pointer to array of
// pointer to function returning char
{
return(pArr);
}
그것은 다른 타입의 별칭을 붙일 수 있다.
typedef unsigned int uint; /* uint is now an alias for "unsigned int" */
참조URL: https://stackoverflow.com/questions/2566027/what-is-the-use-of-typedef
'programing' 카테고리의 다른 글
헤더 파일의 변수 선언 (0) | 2022.05.07 |
---|---|
Vuex 스토어 값을 입력하지 않고 업데이트 (0) | 2022.05.07 |
소수점 자리 n개로 부동 소수점 형식 지정 (0) | 2022.05.06 |
V-모델이 입력에 대한 값 변경을 수신하지 않음(vuejs) (0) | 2022.05.06 |
비동기 jdbc 호출이 가능한가? (0) | 2022.05.06 |