C4172 함수가 로컬 또는 임시 주소 또는 로컬 변수에 대한 참조를 반환하는 경우 Visual C++ 경고가 표시됩니다. 이 같은C4172 Visual C++ 경고가 오류로 간주되어서는 안되는 시나리오가 있습니까?
뭔가 :이 오류로 C4172을 치료하고 컴파일을 중단 Visual C++를 만들기 위해 #pragma warning
을 사용하는 것이 좋습니다처럼
int& fun()
{
int var;
return var; //C4172
}
지금 보인다.
C4172가 실제로 오류가 아닌 정상적인 시나리오가 있습니까?
int * stackTester()
{
int dummy;
return &dummy;
}
bool stackGoesUp()
{
int dummy;
return stackTester() > &dummy;
}
그러나 일반적으로 오류와 같은 경고를 취급한다 : 누구도 이렇게 할 이유
그래서, 당신이 알고 싶어하지 않는 코드 - 의미 : 그것은 시작하는 경고로 정의 된 이유는 무엇입니까? 좋은 질문입니다. –
가능성이 높습니다. 컴파일러는 언어 구문 오류가 아닌 로컬에 대한 참조를 반환하는 정의되지 않은 동작이기 때문에 컴파일러가 컴파일 오류가 아닌 진단용으로 제공하는 것이 가장 좋습니다. 언어 구문 오류로 정의되지 않은 이유는 무엇입니까? 구문 오류가 아니기 때문입니다. –
@jim mcnamara : 네, 맞습니다. – sharptooth