C 언어에서 typedef와 정의의 차이점은 무엇입니까?

清浅
풀어 주다: 2019-04-04 09:54:08
원래의
7909명이 탐색했습니다.

typedef와 정의의 차이점은 다음과 같습니다. 정의는 전처리 편집기이고, 정의 가능한 매크로는 교체 가능성이 있는 반면, typedef는 편집기에 의해 처리되고 범위 규칙을 따르며 정의 유형 별칭으로 사용할 수 있습니다

#define typedef와 유사한 다양한 데이터 유형을 정의하기 위한 별칭이기도 한 C 지시어입니다. 하지만 여전히 차이점이 있습니다. 다음으로, 어느 정도 참고 효과가 있는 차이점을 자세히 소개하겠습니다. [추천 강좌:

C 언어 튜토리얼

] C 언어에서 typedef와 정의의 차이점은 무엇입니까?

1. 전처리기 VS 컴파일러#define은 정의 지점에서 #define 값을 복사하여 사용 지점에 붙여넣는 전처리기에 의해 처리됩니다. Typedef는 컴파일러에 의해 처리되며 새로운 유형의 실제 정의입니다. 컨트롤이 컴파일러에 도달할 때쯤이면 모든 #define이 교체될 것입니다.

차이의 영향

(1) typedef는 세미콜론으로 끝나야 하며 #define은 세미콜론으로 끝나서는 안 됩니다.

(2) #define에 대체 부작용이 있을 수 있습니다. 예:

   typedef char * string_t;         
   #define string_d char *        
   string_t s1,s2; // s1和s2都是char *类型        
   string_d s3,s4; // s3是char *但是s4的类型是char(而不是char *)
로그인 후 복사

두 번째 진술의 문제는 전처리기가 이를

char * s3,s4;
로그인 후 복사

로 대체하기 때문입니다. 이는 s3은 char* 유형이지만 s4는 char 유형임을 의미합니다. 모든 변수를 포인터 유형으로 만들려면 모든 변수를 지정해야 합니다. *

(3) typedef는 범위 규칙을 따릅니다. 즉, 새 유형이 범위(함수 내)에 정의된 경우 범위가 존재하는 경우에만 새 유형 이름이 표시됩니다. 그러나 전처리기가 #define을 만나면 모든 항목을 대체합니다(그 이후에는 범위 지정 규칙이 없습니다). 예:

 int main (){            
 { 
 //新范围开始              
 typedef int myInt_t;                 
 #define myInt_d int                
 myInt_t a;  // a的类型为int                
 myInt_d b;  // b的类型为int            
 } //新范围结束           
 myInt_t c; //错误,输入myInt_t未找到            
 myInt_d d; //d的类型为int        
 }
로그인 후 복사

2. Macros VS type aliases

#define은 매크로를 정의하는 데에도 사용할 수 있지만 typedef는 기존 유형에 새 이름을 제공하는 데에만 사용할 수 있습니다(새 유형을 만들 수는 없습니다). 마찬가지로 #define을 사용하여 실제로 N을 정의하지는 않지만 코드 전체에서 N을 10으로 바꾸는 변수

#define N 10
로그인 후 복사

를 정의할 수 있습니다. 따라서 명명된 상수에 사용할 수 있습니다. Typedef는 정의된 유형에만 새 이름을 제공할 수 있습니다

3. typedef를 유형 별칭으로 사용하세요

일부 유형 정의는 #define이 아닌 typedef를 통해서만 정의할 수 있습니다. 예:

(1) 크기 10의 정수 배열에 새 이름을 지정합니다.

       typedef int arr [ 10 ] ;
로그인 후 복사
(2) 구조 유형

typedef struct {           
int a;            
char b;        
} myType;
로그인 후 복사

에 새 이름을 지정합니다. 요약: 위 내용은 이 기사의 전체 내용입니다. 모두에게 도움이 될 것입니다.

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!