2014-09-11 1 views
-7

나는 다음과 같은 루프가 지금까지 끝낼 수있는 방법을 알아 질수 그림 :왜 C에서이없는 무한 루프/C++

for(int i;i<i+1;i++) 
+5

내가 max_int에 도달하면 오버플로되어 음수가되고 루프 정지가 발생합니다. – simpletron

답변

7

부호있는 정수가 정의되지 않은 동작입니다 넘쳐. 어떤 루프 종료 또는 자체에서 나타납니다.

또한 i을 초기화하지 않고 정의되지 않은 동작 인 값에 액세스합니다.

+5

신경 쓰지 마세요. 지정되지 않은 값을 가진 객체에 액세스하는 것은 UB입니다. –

2

부호가있는 정수는 두 번째 비트로 complement arithmetic을 사용하여 구현됩니다. 최상위 비트가 설정되면 음수 값을 갖습니다. 최대 양수 값 +1을 수행하면 조건이 거짓이되는 지점에서 최대 음수 값을 얻습니다. 이것은 C 표준에 의해 정의되지 않지만 이상한 하드웨어를 사용하지 않는 한 매우 그렇습니다.

+0

... 또는 코드가 노출되는 정의되지 않은 동작으로 인해 전체 또는 전체 코드에서 상태 확인을 버리면이 코드를 최적화하는 좋은 컴파일러가 있습니다. – user396672