typedef와 정의의 차이점은 다음과 같습니다. 정의는 전처리 편집기이고, 정의 가능한 매크로는 교체 가능성이 있는 반면, typedef는 편집기에 의해 처리되고 범위 규칙을 따르며 정의 유형 별칭으로 사용할 수 있습니다
#define typedef와 유사한 다양한 데이터 유형을 정의하기 위한 별칭이기도 한 C 지시어입니다. 하지만 여전히 차이점이 있습니다. 다음으로, 어느 정도 참고 효과가 있는 차이점을 자세히 소개하겠습니다. [추천 강좌:
C 언어 튜토리얼]
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 }
#define은 매크로를 정의하는 데에도 사용할 수 있지만 typedef는 기존 유형에 새 이름을 제공하는 데에만 사용할 수 있습니다(새 유형을 만들 수는 없습니다). 마찬가지로 #define을 사용하여 실제로 N을 정의하지는 않지만 코드 전체에서 N을 10으로 바꾸는 변수
#define N 10
를 정의할 수 있습니다. 따라서 명명된 상수에 사용할 수 있습니다. Typedef는 정의된 유형에만 새 이름을 제공할 수 있습니다
3. typedef를 유형 별칭으로 사용하세요일부 유형 정의는 #define이 아닌 typedef를 통해서만 정의할 수 있습니다. 예:
(1) 크기 10의 정수 배열에 새 이름을 지정합니다. typedef int arr [ 10 ] ;
typedef struct { int a; char b; } myType;
에 새 이름을 지정합니다. 요약: 위 내용은 이 기사의 전체 내용입니다. 모두에게 도움이 될 것입니다.
위 내용은 C 언어에서 typedef와 정의의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!