Typedef 사용법에는 다음이 포함됩니다. 1. Typedef 기본 데이터 유형은 "별칭"을 사용하며 C 언어의 모든 데이터 유형은 typedef를 사용하여 유형 이름을 재정의할 수 있습니다. 2. Typedef는 사용자 정의 데이터 유형에 대해 "별칭"을 사용하며 사용자 정의 데이터 유형에는 다음이 포함됩니다. 구조 구조체 이름{ };, 공용체 단위 이름 { };, 열거형 열거형 { }; 3. Typedef는 배열에 대해 "별칭"을 사용합니다. 4. Typedef는 포인터에 대해 "별칭"을 사용합니다.
이 기사의 운영 환경: Windows 10 시스템, C++ 20 버전, dell g3 컴퓨터.
실제 응용 프로그램에서 typedef는 주로 다음 네 가지 용도로 사용됩니다.
즉, C 언어의 모든 데이터 유형은 다음과 같습니다. typedef 키워드를 사용하여 유형 이름을 재정의하세요
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
사용자 정의 데이터 유형에는 다음이 포함됩니다: 구조체 구조체 이름{ } , 공용체 단위 이름 { } ;, 열거형 열거형 { }
struct students{ char sex; char name[120]; int ages;};
구조의 데이터 이름을 재정의하는 데 일반적으로 사용되는 방법은 다음과 같습니다.
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"
또한 typedef를 사용하여 정의할 수도 있습니다.
struct students{ char sex; char name[120]; int ages;};typedef struct students std;std.name[20]="wujunwu"
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
int a=2;int* pointer;pointer =&a;
는 다음과 같습니다.
int a=2;typedef int* pointer;pointer p;p=&a;
a의 데이터 유형이 char인 경우, 즉 char a =2이면
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
사실 위 프로그램은 두 단계를 수행합니다.
첫 번째 단계: 포인터에 "별칭" 지정
pCopySDMMC2Mem p1;pBL2Type p2;
두 번째 단계: 강제 유형 변환
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;
세 번째 단계: 포인터에 값 할당 포인터
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
요약: typedef를 사용할 때 typedef는 새로운 유형을 생성하지 않고 프로그램에서 사용할 기존 유형에 대한 "별칭"을 제공할 뿐입니다.
다음 코드와 같이 간단한 typedef 사용 예를 살펴보겠습니다.
typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
위 코드에서 "const PCHAR"는 "const char*"와 동일합니까?
답은 '아니오'입니다. Typedef는 유형의 새로운 별칭을 정의하는 데 사용되며 단순한 문자열 대체가 아닙니다. 따라서 "const PCHAR"의 const는 전체 포인터 자체에 불변성을 부여하여 상수 포인터 "char* const(char를 가리키는 상수 포인터)"를 형성합니다. 즉, 실제로는 "const char*(상수 char에 대한 포인터)"가 아니라 "char* const"와 동일합니다. 물론, 다음 코드에서 볼 수 있듯이 const PCHAR을 const char*와 동일하게 만드는 것도 쉽습니다.
typedef const char* PCHAR;int strcmp(PCHAR, PCHAR);
실제로 포인터에 대한 typedef를 선언할 때마다 최종 typedef 이름에 const를 추가해야 합니다. 그래서 포인터 자체는 일정합니다.
typedef가 객체의 저장 특성에 실제로 영향을 미치지는 않지만 auto, extern, static 및 Register와 같은 키워드와 마찬가지로 여전히 구문상의 저장 클래스 키워드라는 점에 유의하는 것도 중요합니다. 따라서 다음과 같은 선언 방법은 적합하지 않습니다.
typedef static int INT_STATIC;
불가능한 이유는 여러 개의 저장소 클래스 키워드를 선언할 수 없기 때문입니다. typedef가 이미 저장소 클래스 키워드의 위치를 차지하고 있으므로 선언할 필요가 없습니다. typedef 선언에서는 더 이상 static 또는 기타 스토리지 클래스 키워드를 사용할 수 없습니다. 물론 컴파일러는 오류도 보고합니다. 예를 들어 VC++2010의 오류 메시지는 "여러 저장소 클래스를 지정할 수 없습니다."입니다.
(1) typedef에 의해 생성된 기호 이름은 유형으로만 제한되며 값은 해당되지 않습니다.
(2) typedef는 컴파일러에 의해 해석되며 해석되지 않습니다. 전처리기
실제 응용 프로그램에서 typedef는 주로 다음 네 가지 용도로 사용됩니다.
즉, 모든 데이터 유형은 C 언어를 사용할 수 있습니다. typedef 키워드를 사용하여 유형 이름을 재정의하세요
typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
사용자 정의 데이터 유형에는 다음이 포함됩니다: 구조 구조체 이름{ }, 공용체 단위 이름 { }; 열거형 enum { };
struct students{ char sex; char name[120]; int ages;};
구조의 데이터 이름을 재정의하는 데 일반적으로 사용되는 방법은 다음과 같습니다.
struct students{ char sex; char name[120]; int ages;}std;std.name[20]="wujunwu"
또한 typedef를 사용하여 다음을 정의할 수도 있습니다.
struct students{ char sex; char name[120]; int ages;};typedef struct students std;std.name[20]="wujunwu"
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
int a=2;int* pointer;pointer =&a;
는 다음과 동일합니다.
int a=2;typedef int* pointer;pointer p;p=&a;
a의 데이터 유형이 char인 경우, 즉 char a =2 ; 그런 다음
char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
사실 위 프로그램은 두 단계를 수행합니다.
1단계: 포인터에 "별칭" 지정
pCopySDMMC2Mem p1;pBL2Type p2;
2단계: 유형 변환 강제
(pCopySDMMC2Mem)0xD0037F98; //真正在写代码时不能这样写(pBL2Type)0x23E00000;
3단계: 할당 포인터에 대한 값
p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
요약: typedef를 사용할 때 typedef는 새로운 유형을 생성하지 않고 프로그램에서 사용할 기존 유형에 대한 "별칭"을 제공할 뿐입니다.
다음 코드와 같이 간단한 typedef 사용 예를 살펴보겠습니다.
typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
위 코드에서 "const PCHAR"는 "const char*"와 동일합니까?
답은 '아니오'입니다. Typedef는 유형의 새로운 별칭을 정의하는 데 사용되며 단순한 문자열 대체가 아닙니다. 따라서 "const PCHAR"의 const는 전체 포인터 자체에 불변성을 부여하여 상수 포인터 "char* const(char를 가리키는 상수 포인터)"를 형성합니다. 즉, 실제로는 "const char*(상수 char에 대한 포인터)"가 아니라 "char* const"와 동일합니다. 물론, 다음 코드에서 볼 수 있듯이 const PCHAR을 const char*와 동일하게 만드는 것도 쉽습니다.
typedef const char* PCHAR;int strcmp(PCHAR, PCHAR);
실제로 포인터에 대한 typedef를 선언할 때마다 최종 typedef 이름에 const를 추가해야 합니다. 그래서 포인터 자체는 일정합니다.
typedef가 객체의 저장 특성에 실제로 영향을 미치지는 않지만 auto, extern, static 및 Register와 같은 키워드와 마찬가지로 여전히 구문상의 저장 클래스 키워드라는 점에 유의하는 것도 중요합니다. 따라서 다음과 같은 선언 방법은 적합하지 않습니다.
typedef static int INT_STATIC;
불가능한 이유는 여러 개의 저장소 클래스 키워드를 선언할 수 없기 때문입니다. typedef가 이미 저장소 클래스 키워드의 위치를 차지하고 있으므로 선언할 필요가 없습니다. typedef 선언에서는 더 이상 static 또는 기타 스토리지 클래스 키워드를 사용할 수 없습니다. 물론 컴파일러는 오류도 보고합니다. 예를 들어 VC++2010의 오류 메시지는 "여러 저장소 클래스를 지정할 수 없습니다."입니다.
위 내용은 typedef의 사용법은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!