'while' 및 'for' 루프의 범위는 무엇입니까?
의 범위는 무엇입니까?while
그리고.for
루프?
예를 들어 루프 내에서 개체를 선언한 경우 해당 동작은 무엇이며 그 이유는 무엇입니까?
다음 예제에서는 루프의 각 반복에 대해 모든 변수가 파괴되고 재생성됩니다.i
루프 반복 사이에 지속되며 for 루프의 조건식과 최종식에 사용할 수 있습니다.루프 외부에서 사용할 수 있는 변수는 없습니다.for 루프 본체 내부의 변수 파괴는 다음 이전에 발생합니다.i
증가합니다.
while(int a = foo()) {
int b = a+1;
}
for(int i=0;
i<10; // conditional expression has access to i
++i) // final expression has access to i
{
int j = 2*i;
}
그 이유에 대해서 말하자면, 루프는 실제로 그들의 몸에 대한 하나의 진술을 취합니다. 단지 곱슬곱슬한 중괄호에 의해 만들어진 복합 진술이라는 진술이 있습니다.복합 문에서 생성되는 변수의 범위는 복합 문 자체로 제한됩니다.그래서 이것은 루프에 대한 특별한 규칙이 아닙니다.
루프 및 선택 문에는 루프 또는 선택 문 자체의 일부로 생성된 변수에 대한 자체 규칙이 있습니다.이것들은 디자이너가 가장 유용하다고 생각하는 것에 따라 디자인될 뿐입니다.
루프에서 선언된 모든 항목은 해당 루프로 범위가 지정되며, 물결 괄호 밖에서는 액세스할 수 없습니다.사실, 새로운 범위를 만들기 위해 루프가 필요하지도 않습니다.다음과 같은 작업을 수행할 수 있습니다.
{
int x = 1;
}
//x cannot be accessed here.
int d;
// can use d before the loop
for(int a = 0; a < 5; ++a) // can use a or d in the ()
{
int b;
// can use d, a, b in the {}
}
int c;
// can use d, c after the loop
a
그리고.b
for 루프의 범위에서만 볼 수 있습니다.범위에는 루프에 있는 내용이 포함됩니다.()
그리고.{}
언급할 가치가 있다고 생각했습니다.
일부 컴파일러에는 for 루프 이니셜라이저 내에 생성된 변수의 범위에 영향을 주는 옵션이 있을 수 있습니다.예를 들어 Microsoft Visual Studio에는 /Zc: for Scope(루프 스코프의 경우 Force Compliance in) 옵션이 있습니다.기본값은 표준 c++ 동작입니다.그러나 for 루프 변수가 for 루프 범위 밖에서 활성 상태로 유지되도록 변경할 수 있습니다.VS를 사용하는 경우 이 옵션이 존재하므로 원하는 동작으로 설정할 수 있습니다.이 옵션이 있는 다른 컴파일러가 있는지 확실하지 않습니다.
일부 컴파일러는 최적화 설정 및 "데드 스토어" 제거로 인해 불필요하다고 생각하는 코드를 제거할 수 있습니다.예를 들어 루프 내부에서 변경 중인 변수가 루프 외부에서 읽히지 않으면 루프 자체가 컴파일러에 의해 삭제될 수 있습니다.
예를 들어, 다음 루프를 생각해 보십시오.
int cnt = 0;
int trys = MAX_INT;
while (trys-- > 0)
{
cnt += trys;
}
Cnt 변수가 루프 뒤에 사용되지 않기 때문에 일부 컴파일러는 루프 내용을 폐기할 수 있습니다.
for 또는 while 루프에서 선언된 변수도 루프 내에서 범위가 지정된다는 것을 추가하려고 합니다.예:
for (int index = 0; index < SOME_MAX; ++index)
{
...
}
// index is out of scope here.
int a;
for(int b=0; b<10; ++b) {
int c;
}
범위를 다음과 같이 지정합니다.
int a;
{
int b=0;
begin:
if (b<= 10)
{
{
int c;
}
++b;
goto begin;
}
}
그 목적은 명확하게 정의된 시퀀스 점에서 변수가 범위를 벗어나는 것입니다.
for( int i = 0; i < 10; ++i )
{
string f = "foo";
cout << f << "\n";
}
// i and f are both "gone" now
샘플 에서 둘 다 " 샘플코서둘다에드위의▁both"입니다.i
그리고.f
는 범내포니다됩함에의위 내에 .{
그리고}
닫는 중괄호가 실행되면 두 변수가 모두 범위를 벗어납니다.
이것의 이유는 단순히 표준이 그렇게 말하고 있기 때문입니다; 그것이 C++ 언어가 작동하는 방식입니다.
동기 부여와 관련하여, 이것이 여러분의 이익에 사용될 수 있다는 것을 고려하십시오.
for( ...)
{
std::auto_ptr<SomeExpensiveObject> obj(new SomeExpensiveObject);
}
위의 코드에서 우리는 RAII 스마트 포인터를 사용하여 루프 내에서 만든 값비싼 객체를 "소유"하고 있습니다.의범지의론의 지정 for
loop은 루프가 실행될 때마다 해당 반복 중에 생성된 개체가 삭제됨을 나타냅니다.
C/C++에서 for 또는 while 루프(또는 다른 괄호로 묶인 블록)에 선언된 변수의 범위는 열린 괄호에서 닫힌 괄호까지입니다.
while (some_condition == true)
{
int myVar = 3;
}
cout << myVar << endl; // This will cause a compilation error
이 코드를 확인하십시오.
#include < stdio.h >
int i = 10;
int main() {
for(int i=0; i<3; i++) {
fprintf(stdout," for i = %d & upper i = %d\n",i,::i);
}
while (i>3) {
int i = 30;
fprintf(stdout," while i = %d & upper i = %d\n",i,::i);
i++;
fprintf(stdout," while i = %d & upper i = %d\n",i,::i);
}
fprintf(stdout,"i = %d \n",i);
}
위의 코드에서 글로벌 변수 i는 for 루프를 제어하는 변수와 다릅니다.
인쇄됩니다.
for i = 0 & upper i = 10
for i = 1 & upper i = 10
for i = 2 & upper i = 10
루프가 실행되는 동안 - 내부에 정의된 변수 i는 로컬 범위를 가지고 있는 반면 (i > 3) 아래의 변수는 글로벌 변수를 따르며 로컬 범위를 참조하지 않습니다.
디판.
변수가 루프 범위 내에 있습니다.즉, 루프 내에 있어야 액세스할 수 있습니다.이는 함수 내에서 변수를 선언한 경우와 마찬가지로 함수 내의 항목만 변수에 액세스할 수 있습니다.
언급URL : https://stackoverflow.com/questions/7880658/what-is-the-scope-of-a-while-and-for-loop
'programing' 카테고리의 다른 글
VBA에서 TextFrame 또는 TextFrame2를 사용하는 경우 (0) | 2023.07.07 |
---|---|
C에서 null이 아닌 종료 문자열을 strncmp로 전달하는 것이 합법입니까? (0) | 2023.07.07 |
jdbct 템플릿을 통해 sql insert의 ID (0) | 2023.07.07 |
Oracle에서 MySQL로 마이그레이션 (0) | 2023.07.07 |
생성자 주입 없이 서비스 인스턴스를 가져오는 중 (0) | 2023.07.07 |