이 루프가 "경고: 반복 3u가 정의되지 않은 동작을 호출합니다"를 생성하고 4줄 이상을 출력하는 이유는 무엇입니까?
문제의 코드:
#include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i * 1000000000 << std::endl; }
다음을 생성합니다. 경고:
warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i * 1000000000 << std::endl; ^
이 경고는 다음 명령문에서 발생하는 부호 있는 정수 오버플로에서 비롯됩니다.
i * 1000000000
i(int 데이터 유형)에 1000000000을 곱하면 정수가 됩니다. 1000000000이 너무 커서 int 변수 범위에 맞지 않기 때문에 오버플로됩니다. 결과적으로 i의 값은 정의되지 않으며 i에 대한 후속 작업(예: 콘솔에 출력)은 예상치 못한 결과를 생성할 수 있습니다.
이 특정 경우 루프는 계속 반복되어 의도한 것 이상의 출력을 생성합니다. 루프 조건 i < 4는 true로 평가됩니다. 그러나 정수 오버플로로 인해 i 값이 손상되었으며 출력 버퍼가 가득 찰 때까지 루프가 계속 반복됩니다.
이 문제를 해결하려면 다음 중 하나를 고려하여 루프의 종료 조건을 조정해야 합니다. 오버플로를 처리하거나 곱셈 결과를 처리할 수 있을 만큼 넓은 정수 데이터 유형을 사용하세요.
위 내용은 이 루프가 오버플로되어 예기치 않은 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!