다음 코드에서는 구조체 멤버 변수를 구조체 이름과 동일한 이름으로 선언했습니다.왜 컴파일러에서 충돌하는 오류가 발생하지 않습니까?
struct st
{
int st;
};
int main()
{
struct st t;
t.st = 7;
return 0;
}
가 나는 GCC 컴파일러에서 잘 일하고과 충돌 오류를 제공하지 않습니다 궁금하다.
그래서,
- 어떻게 구조 이름과 변수 이름을 컴파일러 알고 있나요?
- 내부적으로 어떤 메커니즘의 컴파일러가 사용합니까?
'main()'은 무엇을 반환합니까? – joop
변수와 구조체 이름은 KnR에서 시작하는 모든 C 컴파일러의 엔티티입니다. 원하는 경우 다른 이름 공간의 정렬. 그래서 그것은 정상입니다. – Matt
'struct'는 컴파일러에게 다음'st'를'st' 값을 갖는 struct로 토큰 화하도록합니다. 마찬가지로 멤버'int st'는 이름이'st' 인'int' 변수로 선언됩니다. 그들의 사용법은 직각이므로 컴파일러는 어휘 분석 중에 혼란 스러울 수 없습니다. –