2011-03-17 2 views
3

한다고 가정 내가 가진 :이름 등가 질문

int a; 
int b; 

이 변수 ab 이름에 해당 (기본 유형은 유형 이름을 가지고 있지 않기 때문에보다 구체적으로, 그들은 고려 될 수있다 이름에 해당)이 있습니까?

감사합니다.

int a; 
int b; 

변수 ab 이름에 해당되지 않습니다 내가 찾은

+0

어떤 언어로 이야기하고 있습니까? –

+0

나는 C.에 대해 말하고 있습니다. 저는 C 언어의 태그를 추가했습니다 :) –

+2

질문이 의미가 없습니다 ... – Nix

답변

6

이름 (보다 적절하고 명목상의) 등가성은 값이 해당 유형의 (완전한) 이름으로 결정된 것과 동일한 유형을 가짐을 의미합니다. 예를 들어 ab은 모두 "int "유형. 구조적 동등성은 이름이 구조적으로 동일하므로 값이 동일한 유형으로 간주된다는 것을 의미합니다. 명명 된 유형이 구조적으로 자체와 동일하기 때문에 명목상 유형 동등성은 구조 유형 동등성을 의미합니다. ab은 이름이 같은 유형 ("int")을 가지기 때문에 명목상 동일한 유형입니다. "기본 형식에 형식 이름이 없다"는 주장은 단순히 거짓입니다. int은 형식 이름입니다. int a; int b;int a, b; 사이에는 차이가 없습니다. 둘 다 ab이 같으며 (구조적으로나 이름이 같은) 유형으로 정의됩니다.

C의 타입 시스템 이름으로 일반적으로 ... 예를 들어, int *short* 다른 유형의 경우에도 intshort 같은 표현이 있고, struct foo { int x; }struct bar { int x; }은 항상 같은 표현이 비록 다른 종류입니다.

+0

나는 이것을 받아 들일 것이고 교수는 틀렸다고 생각할 것이다. 과거의 시험 답안은 당신이 옳다는 것을 나타냅니다. –

0

일부 클래스 노트에 있음을 시사한다. 와 그러나

:

int a, b; 

변수 ab 이름이 동일합니다.

+0

그 클래스 노트 나 그 해석은 상당히 틀린 것입니다 - 그러한 구별에서 가능한 의미 또는 가치는 무엇입니까? 두 경우 모두'a'와'b'는 같은 타입 (즉 "int")을 가지므로 타입 상등하고 타입 동등성은 이름 동등성입니다 - C는'a'와'b'를 고려합니다 동일한 유형이므로, 이름 사이에 동일한 유형 ("int")이 있기 때문에 캐스팅이나 프로모션이 필요하지 않습니다. OTOH 중 하나가 "짧음"으로 선언되면 "int"와 "short"가 같은 크기이더라도 서로 다른 유형을 갖습니다. –

0

나는 C가 이름 등가성을 채택하지 않는다고 생각합니다. IMHO, C는 구조와 노동 조합을 예외로 구조적 동등성을 채택합니다. 그 (것)들을 위해 이름은 사용된다. 값은 이름 동등성에서 해당 유형의 이름에 의해 결정된 것과 동일한 유형을 가지며 값은 구조적으로 동등한 것으로 동등한 것으로 결정된 것과 동일한 유형으로 간주됩니다. 그러나 구조적 동등성에서도 이름에 관계없이 결정되지 않습니다.

기본적으로 프로그래밍 언어의 원자 유형은 이름을 가지며 이름 동등성 및 구조적 동등성 둘 다에서 사용됩니다. 차이는 int * 또는 char[10]과 같은 파생 된 유형에서 비롯됩니다. "기본 유형에는 유형 이름이 있습니다." 그리고 C의 타입 시스템은 파생 된 타입의 구조를 타입 정의어를 제외하고 사용자가 정의한 이름까지 비교합니다. 심지어 사용자가 typedef을 사용하여 정의한 것입니다.

C 타입의 시스템 구조가 일반적이다 .. 예 int *short * 및 다른 유형이지만 int *int *와 동일 타입이다.그 문자가 struct foo { int x; }struct bar { int x; } 인 이유는 사용자 정의 형식 이름까지 다른 구조를 가지기 때문입니다. 유형이 struct foo *struct foo *은 동일한 구조이므로 동일한 유형입니다. 제발, struct 유형의 구조를위한 것을 혼동하지 마십시오. C에서 형식 이름을 더 정확하게 구조화하기위한 것입니다.

단순히 strutural equivalence에서 원자 유형 이름까지 유형이 펼쳐져 비교됩니다. C에서 유형은 사용자 정의 이름까지 펼쳐집니다. (펼치기 위해 http://www.csd.uwo.ca/~moreno//CS447/Lectures/TypeChecking.html/node3.html를 참조하십시오) 이것이 차이점입니다. 당연히 이름에 해당하는 유형은 구조상으로는 동일하지만 그 반대가 아닙니다. 다음의 경우에 대해

:

int x; 
int y; 

xy 이름 및 동등한 구조 및 상응하는 양. 그러나 다음과 같은 경우 :

int *x; 
int *y; 

xy 구조적 동일하지만 해당 이름을 수 없습니다. 심지어 다음과 같은 경우에이 선언이 이전 선언의 단지 속기로 간주됩니다에 대한

int *x, *y; 

xy이 엄격한 이름 등가 방식에서 동등한 것으로 간주되지 않습니다. Ada는 엄격한 이름 등가성을 채택한 잘 알려진 언어입니다.