>  기사  >  typedef의 사용법은 무엇입니까

typedef의 사용법은 무엇입니까

DDD
DDD원래의
2023-06-07 10:38:105165검색

Typedef 사용법에는 다음이 포함됩니다. 1. Typedef 기본 데이터 유형은 "별칭"을 사용하며 C 언어의 모든 데이터 유형은 typedef를 사용하여 유형 이름을 재정의할 수 있습니다. 2. Typedef는 사용자 정의 데이터 유형에 대해 "별칭"을 사용하며 사용자 정의 데이터 유형에는 다음이 포함됩니다. 구조 구조체 이름{ };, 공용체 단위 이름 { };, 열거형 열거형 { }; 3. Typedef는 배열에 대해 "별칭"을 사용합니다. 4. Typedef는 포인터에 대해 "별칭"을 사용합니다.

typedef의 사용법은 무엇입니까

이 기사의 운영 환경: Windows 10 시스템, C++ 20 버전, dell g3 컴퓨터.

실제 응용 프로그램에서 typedef는 주로 다음 네 가지 용도로 사용됩니다.

1) Typedef 기본 데이터 유형은 "별칭"을 사용합니다.

즉, C 언어의 모든 데이터 유형은 다음과 같습니다. typedef 키워드를 사용하여 유형 이름을 재정의하세요

typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
2) typedef는 사용자 정의 데이터 유형에 "별칭"을 사용합니다.

사용자 정의 데이터 유형에는 다음이 포함됩니다: 구조체 구조체 이름{ } , 공용체 단위 이름 { } ;, 열거형 열거형 { }

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"
3) Typedef는 배열에 대해 "별칭"을 사용합니다.
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
4) typedef는 포인터에 대해 "별칭"을 사용합니다.
일반 포인터
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 사용 예를 살펴보겠습니다.

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와 #define의 차이점:

(1) typedef에 의해 생성된 기호 이름은 유형으로만 제한되며 값은 해당되지 않습니다.
(2) typedef는 컴파일러에 의해 해석되며 해석되지 않습니다. 전처리기

typedef의 네 가지 용도

실제 응용 프로그램에서 typedef는 주로 다음 네 가지 용도로 사용됩니다.

1) typedef의 기본 데이터 유형은 "별칭"입니다.

즉, 모든 데이터 유형은 C 언어를 사용할 수 있습니다. typedef 키워드를 사용하여 유형 이름을 재정의하세요

typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
2) typedef는 사용자 정의 데이터 유형에 대한 "별칭"을 사용합니다.

사용자 정의 데이터 유형에는 다음이 포함됩니다: 구조 구조체 이름{ }, 공용체 단위 이름 { }; 열거형 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"
3) Typedef는 "별칭"을 사용합니다. 배열
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
4) typedef는 포인터에 대한 "별칭"을 사용합니다.
일반 포인터
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 사용 예를 살펴보겠습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.