/Zc:gotoScope
(goto 범위에서 규칙 적용)
/Zc:gotoScope
컴파일러 옵션을 사용하면 지역 변수의 초기화를 뛰어넘는 문에 goto
대한 표준 C++ 동작을 검사할 수 있습니다.
구문
/Zc:gotoScope
[-
]
설명
/Zc:gotoScope
컴파일러 옵션은 하나 이상의 지역 변수의 초기화를 뛰어 넘는 문에 goto
대해 C++ 표준 동작을 적용합니다. 컴파일러는 지정된 경우 이러한 모든 경우에 오류 C2362 를 내보낸다 /Zc:gotoScope
. 이 /Zc:gotoScope-
검사를 완화하지만, 사소한 소멸자가 아닌 지역 변수의 초기화를 건너뛰면 goto
컴파일러가 여전히 오류를 내보낸다.
이 옵션의 /Zc:gotoScope-
목적은 이전 코드 베이스를 보다 규칙적인 코드로 쉽게 마이그레이션하는 데 도움이 되는 것입니다. 비준수 코드를 업데이트할 때까지 특정 오류를 표시하지 않는 데 사용할 수 있습니다.
/Zc:gotoScope
컴파일러 옵션은 Visual Studio 2022 버전 17.4의 새로운 기능입니다. 옵션은 기본적으로 꺼져 있습니다. 옵션(또는 같은 또는 )을 의미하는 /permissive-
/std:c++20
/std:c++latest
옵션에 의해 /permissive-
자동으로 사용하도록 설정됩니다. 오류 검사를 명시적으로 사용하도록 설정하려면 컴파일러 명령줄에 추가 /Zc:gotoScope
합니다. 확인을 명시적으로 사용하지 않도록 설정하려면 이 /Zc:gotoScope-
옵션을 사용합니다. /Zc:gotoScope-
옵션 또는 해당 옵션을 의미하는 /permissive-
옵션 후에 /permissive-
나타나야 합니다.
예시
이 샘플에서는 다음을 사용하여 /Zc:gotoScope
컴파일할 때 오류 메시지를 생성합니다.
int g(int*);
bool failed(int);
int f() {
int v1;
auto result = g(&v1);
if (failed(result))
goto OnError;
int v2 = v1 + 2;
return v2;
OnError:
return -1;
}
/* Output:
t.cpp(9): error C2362: initialization of 'v2' is skipped by 'goto OnError'
*/
코드가 컴파일된 /Zc:gotoScope-
경우 컴파일러는 오류를 내보내지 않습니다.
지정한 경우에도 /Zc:gotoScope-
지역 변수에 사소한 소멸자가 없는 경우 컴파일러는 여전히 오류를 내보낸다. 예시:
int g(int*);
bool failed(int);
class S {
public:
S(int);
~S();
int mf() const;
};
int f()
{
int v1;
auto result = g(&v1);
if (failed(result))
goto OnError;
S s(v1);
return s.mf();
OnError:
return -1;
}
/* Output:
t.cpp(17): error C2362: initialization of 's' is skipped by 'goto OnError'
*/
Visual Studio에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.
구성 속성>C/C++>명령줄 속성 페이지를 선택합니다.
추가 옵션에서
/Zc:gotoScope
또는/Zc:gotoScope-
을(를) 추가합니다. 확인을 선택하거나 적용을 선택하여 변경 내용을 저장합니다.