1

long 값에 대한 산술 연산을 수행하는 코드를 작성 중이므로 오버플로 예외가 발생하지 않습니다.오버플로 정수 miltiplication에서 예외가 발생하지 않도록 할 수 있습니까?

코드는 Windows (Visual Studio) 및 Linux (ARM Linux)에서 컴파일해야합니다.

특정 코드에 대한 오버플로 예외를 생성해서는 안된다는 컴파일에 지시 할 수있는 pragma 또는 compile time 지시문이 있습니까?

주요 포인트는 여기에 있습니다 :에 관계없이 프로젝트의 일반적인 구성의

1 그것은 창에 모두 작동하고

2 리눅스

,이 부분은 오버 플로우 예외를 생성하지 않아야합니다. (그래서 프로젝트에서 매개 변수를 설정하는 것은 좋은 해결책이 아닙니다.)

+1

나는 오버플로가 발생할 때 (C++ 예외의 의미로) 예외가 없다는 것을 확신한다. – Davidbrcz

+0

실제로 정수 곱하기는 예외를 생성하지 않습니다. C/C++에서는 보증을 원할 경우 * 부호없는 정수 곱셈이 오버플로가되지 않아야합니다. –

+0

@BrettHale 감사. 부호있는 정수는? 오버플로가 발생합니까? – mans

답변

0

정수 유형의 표현식에 대해 오버플로 예외를 생성하는 구현에 대해서는 알지 못합니다. 그러나 질문은 다음과 같습니다. 무엇을하고 싶습니까? 내가 아는 Windows 및 모든 Linux 컴파일러는 단순히 결과를 자동으로 알리며, 이 바람직 할 경우 이 아니면 대체로 생각할 수 없습니다.

이런 종류의 문제를 처리하는 일반적인 방법은 계산을 시작하기 전에 사전 조건 확인을 사용하는 것입니다. 은 수행 할 계산을 알고 있으므로 은 오버플로없이 안전하게 으로 처리 할 수있는 값 범위를 결정할 수 있으며 시작하기 전에 입력 범위가 인지 확인할 수 있습니다.

+0

내가 원하는 것은 오버플로 데이터가 손실되었습니다. 예를 들어, 만약 내가 바이트 x = 128, 바이트 y = 129, 그리고 바이트 c = x + y, C는 1이어야하고 아무 예외도 없어야합니다. – mans

+0

서명되지 않은 산술에 대한 규칙입니다. 하지만 왜? 왜 'c'가 '1'이 될까요? –