최상의 답변
유형 검사는 구문의 유형 (상수, 변수, 배열, 목록, 객체)는 사용 컨텍스트에서 예상되는 것과 일치합니다. 이렇게하면 특정 유형의 프로그래밍 오류가 감지되고보고됩니다. 예를 들어 모듈로 연산자 8 \% 3.5를 포함하는 다음 표현식을 고려하십시오. 모듈로 연산자는 두 개의 정수를 예상하므로이 표현식은 오류를 발생시킵니다. 유형 검사기에서 알아야 할 사항 – 언어의 구문 구조 (예 : 연산자) – 기본 언어 유형 (int, real) – 구문에 유형을 할당하는 규칙 예 : “+의 두 피연산자가 모두 int이면 결과는 int”
유형 검사에는 정적 및 동적 p의 두 가지 유형이 있습니다. >
정적 유형 검사 : 컴파일 시간에 수행되는 유형 검사. 이러한 언어를 사용하는 경우 변수를 사용하기 전에 변수 유형을 선언해야합니다 (컴파일러 변수가 속한 데이터 유형을 알아야합니다). 예를 들어, C ++ int a = 10; 여기서 컴파일러는 변수 “a”를 사용하기 전에 데이터 유형을 알아야합니다. 예 : C, C ++, JAVA, C #은 일부 통계적으로 유형이 지정된 언어
동적입니다. 유형 검사 : 런타임에 수행되는 유형 검사. 이러한 언어를 사용할 때 변수 유형을 지정하거나 선언 할 필요가 없습니다. 대신 컴파일러가 변수에 값을 처음 할당 할 때 변수 유형이 무엇인지 파악합니다. 이제 파이썬에서 몇 가지 명령문을 고려하십시오. str = “Python”str2 = 10 여기에서 데이터 유형을 선언 할 필요가 없습니다. 컴파일러 자체는 값을 처음 할당 할 때 변수가 속한 유형을 알고 있습니다 (str1은 “String”데이터 유형이고 str2는 “int”유형입니다). 예 : VBScript, Python은 동적으로 입력 된 언어입니다.
Answer
유형 검사는 작업이 변수는 호환 가능한 유형을 사용합니다. 언어마다 다른 수준의 변수 호환성이 있습니다. 강력한 유형 검사 언어에는 표현식의 변수 유형에 대한 엄격한 규칙이 있습니다. 동전의 다른쪽에는 다양한 유형을 혼합 할 수있는 언어가 있습니다. 이러한 언어는 몇 가지 변수 변환 규칙을 사용하여 혼합 유형을 보완하는 방법을 제공합니다.
예를 들어 일부 엄격한 유형 언어에서는 정수 2 개 또는 부동 소수점 숫자 2 개만 추가 할 수 있지만 시도하면 오류 플래그를 지정할 수 있습니다. 부동 소수점에 정수를 추가합니다. 다른 언어에서는 float에 정수를 추가하면 암시 적으로 정수를 float로 변환 한 다음 더하기를 수행 할 수 있습니다.
C ++는 중간에 있습니다. C ++에서는 일부 암시 적 변환을 허용합니다. C와 C ++에는 몇 가지 허점이 있습니다. 먼저 캐스팅이라고합니다. 캐스팅은 기본적으로 컴파일러에게 선언 된 값이 아닌 “이 유형”으로 변수에 대해 알려주는 것입니다. 예를 들어 위의 예에서 float를 int로 처리하려면 float를 int로 캐스팅 할 수 있습니다.
예 : int x, a; float y, b;
b = x + y;
a = x + (int) y; 또는 a = (int) (x + y);
포인터는 일반적으로 유형이 지정되므로 캐스팅을 사용하여 한 구조를 다른 유형의 구조처럼 보이게 만들 수 있습니다.
typedef struct {/ * 구성원 * /} A;
typedef struct {/ * 구성원 * /} B;
A ax;
B * bp;
bp = &ax; // 오류 : 다양한 유형의 포인터!
bp = (B *) &ax; // 합집합처럼 B가있는 오버레이 A를 효과적으로 정의합니다.
포인터에는 와일드 카드 포인터 인 void *도 있습니다. mem 유형 함수와 같은 모든 유형의 포인터가 허용되는 곳에서 사용할 수 있습니다. memcpy.