백엔드 개발 C#.Net 튜토리얼 C 언어에서 typedef의 용도는 무엇입니까?

C 언어에서 typedef의 용도는 무엇입니까?

Jul 18, 2020 pm 02:23 PM
c 언어

typedef의 사용법은 다음과 같습니다. 1. 기본 데이터 유형에 대한 새 유형 이름을 정의합니다. 2. 사용자 정의 데이터 유형(구조, 공용체 및 열거 유형)에 대한 간결한 유형 이름을 정의합니다. 3. 유형 이름에 대한 간결한 유형 이름을 정의합니다. 4. 포인터의 간결한 이름을 정의합니다.

C 언어에서 typedef의 용도는 무엇입니까?

C 언어를 사용하면 사용자는 typedef 키워드를 사용하여 시스템의 기본 기본 유형 이름, 배열 유형 이름, 포인터 유형 이름, 사용자 정의 구조 유형 이름 및 공유 유형을 대체하는 사용자 정의 데이터 유형 이름을 정의할 수 있습니다. 이름, 열거 이름 등

사용자가 프로그램에서 자신의 데이터 유형 이름을 정의하면 자신의 데이터 유형 이름을 사용하여 프로그램에서 변수 유형, 배열 유형, 포인터 변수 유형, 함수 유형 등을 정의할 수 있습니다.

예를 들어 C 언어는 C99 이전에는 Boolean 유형을 제공하지 않았지만 다음 코드와 같이 typedef 키워드를 사용하여 간단한 Boolean 유형을 정의할 수 있습니다.

typedef int BOOL;
#define TRUE 1
#define FALSE 0
로그인 후 복사

정의한 후 기본 유형을 사용할 수 있습니다. type like 다음 코드와 같이 데이터처럼 사용하세요.

BOOL bflag=TRUE;
로그인 후 복사

typedef를 사용하는 4가지 방법

실제 사용에서 typedef의 주요 용도는 다음과 같습니다.

1. 기본 데이터 유형에 대한 새 유형 이름 정의

즉, 모든 시스템의 기본 기본 유형은 typedef 키워드를 사용하여 유형 이름을 재정의할 수 있습니다.

typedef unsigned int COUNT;
로그인 후 복사

게다가, 또한 이 접근 방식을 사용하여 플랫폼 독립적인 유형을 정의할 수도 있습니다. 예를 들어 REAL이라는 부동 소수점 유형을 정의하려는 경우 대상 플랫폼 1에서 가장 높은 정밀도 유형을 나타내도록 합니다. 즉,

typedef long double REAL;
로그인 후 복사

long double을 지원하지 않는 플랫폼 2에서는 다음과 같이 변경합니다.

typedef double REAL;
로그인 후 복사

그래도 괜찮습니다. double도 지원하지 않는 플랫폼 3에서는 다음과 같이 변경합니다.

typedef float REAL;
로그인 후 복사

이런 식으로 여러 플랫폼에 걸쳐 프로그램을 이식할 때 typedef의 정의만 수정하면 됩니다. 다른 소스 코드. 실제로 이 기술은 표준 라이브러리에서 널리 사용됩니다. 예를 들어 VC++2010의 crtdefs.h 파일에 있는 size_t의 정의는 다음과 같습니다.

#ifndef _SIZE_T_DEFINED
#ifdef  _WIN64
typedef unsigned __int64    size_t;
#else
typedef _W64 unsigned int   size_t;
#endif
#define _SIZE_T_DEFINED
#endif
로그인 후 복사

2. 열거형) (예제 유형) 간결한 유형 이름 정의

구조를 예로 들어 아래에서는 Point라는 구조를 정의합니다.

struct Point
{
    double x;
    double y;
    double z;
};
로그인 후 복사

이 구조를 호출할 때 다음 코드와 같이 이 구조를 호출해야 합니다.

struct Point oPoint1={100,100,0};
struct Point oPoint2;
로그인 후 복사

여기서 struct Point라는 구조체는 변수를 정의할 때 위의 호출 메소드처럼 struct 예약어를 사용해야 하는 새로운 데이터 유형입니다. Point는 int 및 double과 같은 변수를 정의하는 데 직접 사용할 수 없습니다. 이제 다음 코드와 같이 typedef를 사용하여 이 구조를 정의합니다.

typedef struct tagPoint
{
    double x;
    double y;
    double z;
} Point;
로그인 후 복사

위 코드에서는 실제로 두 가지 작업이 완료됩니다.

1) 새 구조 유형을 정의합니다. 코드는 다음과 같습니다. 표현:

struct tagPoint
{
    double x;
    double y;
    double z;
} ;
로그인 후 복사

그 중 struct 키워드와 tagPoint가 함께 이 구조 유형을 구성합니다. 이 구조는 typedef 키워드의 존재 여부와 관계없이 존재합니다.

2) typedef를 사용하여 이 새 구조에 Point라는 별칭을 지정합니다. 즉:

typedef struct tagPoint Point
로그인 후 복사

따라서 이제 다음 코드에 표시된 대로 Point를 직접 사용하여 int 및 double과 같은 변수를 정의할 수 있습니다.

Point oPoint1={100,100,0};
Point oPoint2;
로그인 후 복사

순서 typedef에 대한 이해를 깊게 하기 위해 다음 코드와 같이 구조체의 예를 살펴보겠습니다.

typedef struct tagNode
{
    char *pItem;
    pNode pNext;
} *pNode;
로그인 후 복사

위의 예제 코드는 표면적으로는 이전 정의 방법과 동일하므로 문제가 없을 것입니다. 그런데 컴파일러가 오류를 보고했습니다. 왜 그럴까요? C 언어에서는 구조체가 자신에 대한 포인터를 포함하는 것을 허용하지 않을 수 있습니까?

사실 문제는 구조체 자체의 정의가 아닙니다. C 언어에서는 구조체에 자신에 대한 포인터를 포함할 수 있다는 점을 모두가 알아야 합니다. 연결 목록과 같은 데이터 구조 구현에서 이러한 예를 많이 볼 수 있습니다. 그렇다면 문제는 무엇입니까? 사실 근본적인 문제는 여전히 typedef의 적용에 있습니다.

위 코드에서 pNext 선언은 새 구조를 설정하는 동안 발견되며 해당 유형은 pNode입니다. 여기서 pNode가 구조의 새로운 별칭을 나타낸다는 점에 유의하는 것이 중요합니다. 그래서 문제가 발생합니다. 구조 유형 자체가 생성되지 않은 경우 컴파일러는 이 구조 유형의 새 별명이 아직 존재하지 않기 때문에 pNode를 전혀 알지 못하므로 자연스럽게 오류를 보고하게 됩니다. 따라서 다음 코드와 같이 구조의 pNext 선언을

typedef struct tagNode
{
    char *pItem;
    struct tagNode *pNext;
} *pNode;
로그인 후 복사

로 수정하거나 struct와 typedef를 별도로 정의하는 등 몇 가지 적절한 조정이 필요합니다.

typedef struct tagNode *pNode;
struct tagNode
{
    char *pItem;
    pNode pNext;
};
로그인 후 복사

위 코드에서 우리는 또한 다음을 사용합니다. 완전히 선언되지 않은 tagNode 유형에 새로운 별칭을 제공하는 typedef입니다. 그러나 이 방법은 C 컴파일러에서 완전히 지원되지만 권장되지는 않습니다. 다음 표준 정의 방법을 사용하는 것이 좋습니다.

struct tagNode
{
    char *pItem;
    struct tagNode *pNext;
};
typedef struct tagNode *pNode;
로그인 후 복사

3、为数组定义简洁的类型名称

它的定义方法很简单,与为基本数据类型定义新的别名方法一样,示例代码如下所示:

typedef int INT_ARRAY_100[100];
INT_ARRAY_100 arr;
로그인 후 복사

4、为指针定义简洁的名称

对于指针,我们同样可以使用下面的方式来定义一个新的别名:

typedef char* PCHAR;
PCHAR pa;
로그인 후 복사

对于上面这种简单的变量声明,使用 typedef 来定义一个新的别名或许会感觉意义不大,但在比较复杂的变量声明中,typedef 的优势马上就体现出来了,如下面的示例代码所示:

int *(*a[5])(int,char*);
로그인 후 복사

对于上面变量的声明,如果我们使用 typdef 来给它定义一个别名,这会非常有意义,如下面的代码所示:

// PFun是我们创建的一个类型别名
typedef int *(*PFun)(int,char*);
// 使用定义的新类型来声明对象,等价于int*(*a[5])(int,char*);
PFun a[5];
로그인 후 복사

小心使用 typedef 带来的陷阱

接下来看一个简单的 typedef 使用示例,如下面的代码所示:

typedef char* PCHAR;
int strcmp(const PCHAR,const PCHAR);
로그인 후 복사

在上面的代码中,“const PCHAR” 是否相当于 “const char*” 呢?

答案是否定的,原因很简单,typedef 是用来定义一种类型的新别名的,它不同于宏,不是简单的字符串替换。因此,“const PCHAR”中的 const 给予了整个指针本身常量性,也就是形成了常量指针“char*const(一个指向char的常量指针)”。即它实际上相当于“char*const”,而不是“const char*(指向常量 char 的指针)”。当然,要想让 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 中的报错信息为“无法指定多个存储类”。

相关推荐:《c语言教程

위 내용은 C 언어에서 typedef의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어 데이터 구조 : 나무 및 그래프의 데이터 표현 및 작동 C 언어 데이터 구조 : 나무 및 그래프의 데이터 표현 및 작동 Apr 04, 2025 am 11:18 AM

C 언어 데이터 구조 : 트리 및 그래프의 데이터 표현은 노드로 구성된 계층 적 데이터 구조입니다. 각 노드에는 데이터 요소와 하위 노드에 대한 포인터가 포함되어 있습니다. 이진 트리는 특별한 유형의 트리입니다. 각 노드에는 최대 두 개의 자식 노드가 있습니다. 데이터는 structtreenode {intdata; structtreenode*왼쪽; structReenode*오른쪽;}을 나타냅니다. 작업은 트리 트래버스 트리 (사전 조정, 인 순서 및 나중에 순서) 검색 트리 삽입 노드 삭제 노드 그래프는 요소가 정점 인 데이터 구조 모음이며 이웃을 나타내는 오른쪽 또는 무의미한 데이터로 모서리를 통해 연결할 수 있습니다.

C 언어 파일 작동 문제의 진실 C 언어 파일 작동 문제의 진실 Apr 04, 2025 am 11:24 AM

파일 작동 문제에 대한 진실 : 파일 개방이 실패 : 불충분 한 권한, 잘못된 경로 및 파일이 점유 된 파일. 데이터 쓰기 실패 : 버퍼가 가득 차고 파일을 쓸 수 없으며 디스크 공간이 불충분합니다. 기타 FAQ : 파일이 느리게 이동, 잘못된 텍스트 파일 인코딩 및 이진 파일 읽기 오류.

C 언어 멀티 스레드 프로그래밍 : 초보자 안내서 및 문제 해결 C 언어 멀티 스레드 프로그래밍 : 초보자 안내서 및 문제 해결 Apr 04, 2025 am 10:15 AM

C 언어 멀티 스레딩 프로그래밍 안내서 : 스레드 생성 : pthread_create () 함수를 사용하여 스레드 ID, 속성 및 스레드 함수를 지정합니다. 스레드 동기화 : 뮤텍스, 세마포어 및 조건부 변수를 통한 데이터 경쟁 방지. 실제 사례 : 멀티 스레딩을 사용하여 Fibonacci 번호를 계산하고 여러 스레드에 작업을 할당하고 결과를 동기화하십시오. 문제 해결 : 프로그램 충돌, 스레드 정지 응답 및 성능 병목 현상과 같은 문제를 해결합니다.

CS 주 3 CS 주 3 Apr 04, 2025 am 06:06 AM

알고리즘은 문제를 해결하기위한 일련의 지침이며 실행 속도 및 메모리 사용량은 다양합니다. 프로그래밍에서 많은 알고리즘은 데이터 검색 및 정렬을 기반으로합니다. 이 기사에서는 여러 데이터 검색 및 정렬 알고리즘을 소개합니다. 선형 검색은 배열 [20,500,10,5,100,1,50]이 있으며 숫자 50을 찾아야한다고 가정합니다. 선형 검색 알고리즘은 대상 값이 발견되거나 전체 배열이 통과 될 때까지 배열의 각 요소를 하나씩 점검합니다. 알고리즘 플로우 차트는 다음과 같습니다. 선형 검색의 의사 코드는 다음과 같습니다. 각 요소를 확인하십시오. 대상 값이 발견되는 경우 : true return false clanue 구현 : #includeintmain (void) {i 포함

C 언어로 카운트 다운을 출력하는 방법 C 언어로 카운트 다운을 출력하는 방법 Apr 04, 2025 am 08:54 AM

C에서 카운트 다운을 출력하는 방법? 답변 : 루프 명령문을 사용하십시오. 단계 : 1. 변수 n을 정의하고 카운트 다운 번호를 출력에 저장합니다. 2. n이 1보다 작을 때까지 n을 지속적으로 인쇄하려면 while 루프를 사용하십시오. 3. 루프 본체에서 n의 값을 인쇄하십시오. 4. 루프가 끝나면 n을 1 씩 빼기 위해 다음 작은 상호 상호를 출력합니다.

C 언어 데이터 구조 : 인공 지능에서 데이터 구조의 핵심 역할 C 언어 데이터 구조 : 인공 지능에서 데이터 구조의 핵심 역할 Apr 04, 2025 am 10:45 AM

C 언어 데이터 구조 : 인공 지능 분야에서 데이터 구조의 주요 역할 개요 인공 지능 분야에서 데이터 구조는 다량의 데이터를 처리하는 데 중요합니다. 데이터 구조는 데이터를 구성하고 관리하고 알고리즘을 최적화하며 프로그램 효율성을 향상시키는 효과적인 방법을 제공합니다. 공통 데이터 구조는 일반적으로 C 언어로 사용되는 데이터 구조에는 다음이 포함됩니다. 배열 : 동일한 유형의 연속 저장된 데이터 항목 세트. 구조 : 다양한 유형의 데이터를 함께 구성하고 이름을 제공하는 데이터 유형. 링크 된 목록 : 데이터 항목이 포인터로 함께 연결되는 선형 데이터 구조. 스택 : 최후의 첫 번째 (LIFO) 원칙을 따르는 데이터 구조. 대기열 : 첫 번째 첫 번째 (FIFO) 원칙을 따르는 데이터 구조. 실제 사례 : 그래프 이론의 인접 테이블은 인공 지능입니다.

C 언어 함수의 개념과 그 정의 형식 C 언어 함수의 개념과 그 정의 형식 Apr 03, 2025 pm 11:33 PM

C 언어 함수는 재사용 가능한 코드 블록이며 처리를위한 매개 변수를 수신하며 결과를 반환합니다. 스위스 육군 나이프와 유사하며 강력하며 신중하게 사용해야합니다. 함수에는 형식 정의, 매개 변수, 반환 값 및 기능 본체와 같은 요소가 포함됩니다. 고급 사용법에는 기능 포인터, 재귀 함수 및 콜백 기능이 포함됩니다. 일반적인 오류는 유형 불일치이며 프로토 타입을 선언하는 것을 잊는 것입니다. 디버깅 기술에는 변수 인쇄 및 디버거 사용이 포함됩니다. 성능 최적화는 인라인 함수를 사용합니다. 기능 설계는 단일 책임의 원칙을 따라야합니다. C 언어 기능의 숙련도는 프로그래밍 효율성과 코드 품질을 크게 향상시킬 수 있습니다.

C 언어로 파일 처리를위한 팁 문제 해결 C 언어로 파일 처리를위한 팁 문제 해결 Apr 04, 2025 am 11:15 AM

C 언어 처리 파일에 대한 팁 문제 해결 C 언어로 파일을 처리 할 때 다양한 문제가 발생할 수 있습니다. 다음은 일반적인 문제와 해당 솔루션입니다. 문제 1 : 파일 코드를 열 수 없음 : 파일*fp = fopen ( "myfile.txt", "r"); if (fp == null) {// 파일 열기 실패} 이유 : 파일 경로 오류 파일이 존재하지 않으면 파일을 확인하여 파일에 실패한 문제 : 파일 읽기 문제 2 : 코드를 확인하십시오. charbuffer [100]; size_tread_bytes = fread (버퍼, 1, siz

See all articles