programing

다른 공간에서 이름이 같은 변수 사용

bestprogram 2023. 6. 21. 22:51

다른 공간에서 이름이 같은 변수 사용

이 코드는 컴파일되지만 Visual Studio에 런타임 오류가 있습니다.

런타임 점검 실패 #3 - 변수 'x'가 초기화되지 않고 사용되고 있습니다...

int x = 15;
int main()
{
    int x = x;
    return 0;
}

그런 행동을 이해할 수가 없어요오류 상자에서 계속을 클릭하면 프로그램이 다시 시작되고 x에 손상된 내용이 있습니다(예:-8556328대신에15).

왜 이 코드는 문제 없이 작동하고 int 배열은 잘 선언되었습니까?

const int x = 5;
int main()
{
     int x[x] = {1,2,3,4};
     return 0;
}

x의 왼쪽에 정의됩니다.=.

그래서x[x],[x]세계적인 것을 참조하십시오.

반면에x = x;,x세계를 숨깁니다.x자체적으로 초기화합니다. -> UB.

새 변수를 선언하면 해당 변수의 이름이 바로 여기에 표시됩니다.

int x =
//     ^- there

왜냐하면 그 시점에서 변수가 완전히 선언되어 있기 때문입니다. 변수의 이름은 의미가 있습니다.이 시점에서 주변 범위에 있는 다른 변수(이전에 선언된 변수)는 숨겨집니다.

C에는 스코프 해상도 연산자가 없으므로 사용하지 못할 수 있습니다.

int x = x;

당신의 프로그램에서.

SRO(Scope resolution operator ::)를 사용하여 컴파일러에게 어떤 x가 진짜 x인지 알려주시기 바랍니다.사용자 정의 이름은 수준의 모호성을 피하기 위해 이와 같은 것을 망치기 때문에(이름은 장식됨), 이는 컴파일러가 가장 적합하게 사용하는 이름일 뿐입니다.

int x = 15;// Real name = gui_x
int main()
{
    int x = x;// lui_x
    return 0;
}

이러한 방식으로 런타임은 사용 중인 버전을 알 수 있지만 모호성을 방지하기 위해 특정 이름을 사용할 것으로 예상됩니다.사용자가 이미 사용된 이름을 사용하고 있는지 모를 경우 위의 문제가 발생할 수 있습니다.이를 위해 C++이 SRO를 만들었습니다.
자, 배열 x가 주소이고 어떤 것을 저장하는 정수가 아닌 경우, 그것이 컴파일러가 뒤죽박죽이 되지 않은 이유입니다.당신은 글을 써야 합니다.

namespace abc //now all global variables are belongs to this ns abc
int x = 15;// Real name = gui_x
int main()
{
int x = abc::x;// lui_x
return 0;
}

언급URL : https://stackoverflow.com/questions/32896140/using-a-variable-with-the-same-name-in-different-spaces