타입 평등
예 (C =에 의해 표시됨) 할당과 같은 기본적인 동작의 의미는 언어 정의에 지정된다. 따라서, 예를 들면, 현재 오브젝트 y
값
x = y;
같은 문장의 의미는 가변
x
위한 메모리 위치로 복사된다.
그러나 할당과 같은 작업을 번역기에서 허용하려면 일반적으로 두 피연산자의 유형이 동일해야합니다 (또는 다른 특정 방식으로 호환 가능해야 함).
따라서 언어 번역자는 두 가지 유형이 동일한 지 여부를 결정해야하는 경우가 있습니다. 이제 우리는 두 가지 유형이 "동등"(또는 동급)이라고 말하는 것이 무엇인지 고려합니다.
두 종류가 동일하게 간주됩니다 여부를 결정하는 두 개의 표준 방법이 있습니다 : 이름 등가 및 구조 등가가.
등가 이름이 가장 간단합니다. 두 유형은 동일한 이름을 사용하는 경우에만 동일합니다. 따라서
typedef struct {
int data[100];
int count;
} Stack;
typedef struct {
int data[100];
int count;
} Set;
Stack x, y;
Set r, s;
하는 이름 당량 언어에서 사용되는 경우, 예를 들면, 코드 (사용 C 구문)는 다음 x
및 y
들은 동일한 타입 일 수 있고 r
및 s
는 똑같은 것이 것 유형은 x
또는 y
은 r
또는 s
유형과 동일하지 않습니다. (즉, 번역기에 의해 허용되지 않는다)이 문 등
x = y;
r = s;
로서 유효하다고 의미하지만 문은
x = r;
유효하지 않을 것이다.
구조적 등가 사용
:, 두 종류의 경우와 동일하고, 단, 그들은 다른 방식으로 해석 될 수있는 동일한 "구조"을 갖는다.
두 유형의 각 구성 요소 이름과 유형이 동일해야하며 유형 정의에서 같은 순서로 나열되어야합니다.
덜 엄격한 요구 사항은 구성 요소 유형이 두 유형에서 동일하고 동일한 순서 여야하지만 구성 요소의 이름이 다를 수 있다는 것입니다.
다시 번역기는
x = r;
같은 문장을 받아들이는 것을 의미 구조적 등가Stack
및 Set
이 등가로 간주되는 두 종류를 사용하여, 상기 예에서 찾고 (참고 C
아무튼 ' 구조상의 동등성을 지원하고 위의 지정에 대해 오류를 줄 것입니다.)
매우 유용한 정보이지만 링크가 깨졌습니다. 고칠 수 있습니까? 감사. – LearningMath
죄송합니다. 해당 링크는 더 이상 유효하지 않습니다. – JerryGoyal