2011-02-02 6 views
15

Estaba trabajando con C# y noté que cuando tenía un número entero muy grande intentaba hacerlo más grande. En lugar de arrojar algún tipo de error de desbordamiento, simplemente establece el número al valor más bajo posible (-2,147,483,648), creo.C# Overflow no funciona? ¿Cómo habilitar la verificación de desbordamiento?

Me preguntaba si había una forma de habilitar la verificación de desbordamiento en Visual Studio?

Respuesta

30

Se pueden utilizar los siguientes pasos para habilitar desbordamiento aritmético/transgresión por debajo de la comprobación en Visual Studio:

  1. Haga clic derecho sobre el proyecto en el Explorador de soluciones y seleccione Propiedades.
  2. En la pestaña Generar, haga clic en el botón Avanzado. (Está hacia la parte inferior)
  3. Marque la casilla de verificación "Comprobar si hay desbordamiento/desbordamiento aritmético".

Esto lanzará un System.OverflowException cuando se produce el desbordamiento en lugar de su operación habitual de cambiar el valor a un valor mínimo.

Sin desbordamiento aritmético/subdesbordamiento habilitados:

int test = int.MaxValue; 
test++; 
//Test should now be equal to -2,147,483,648 (int.MinValue) 

Con desbordamiento aritmético/subdesbordamiento habilitados:

int test = int.MaxValue; 
test++; 
//System.OverflowException thrown 

Utilizando un bloque verificado:

checked 
{ 
    int test = int.MaxValue; 
    test++; 
    //System.OverflowException thrown 
} 

La documentación para comprobar está disponible here. (Gracias a Sasha por recordarme al respecto.)

+12

También puede utilizar la palabra clave 'checked' para envolver una declaración o un conjunto de declaraciones para que se comprueben explícitamente para el desbordamiento aritmético. Establecer la propiedad de todo el proyecto es un poco arriesgado porque a menudo el desbordamiento es una expectativa bastante razonable. –

+2

Tenga en cuenta que esta opción del compilador solo se aplica cuando no hay un contexto explícito 'checked' o' no checked' en el código. Además, afectará al ejecutable resultante, no solo a la depuración en Visual Studio. Consulte aquí para obtener documentación: http://msdn.microsoft.com/en-us/library/h25wtyxf%28v=VS.100%29.aspx – Justin

+0

@Rionmonster y @Sasha: no conocía ninguna de esas dos funciones . Gracias a ambos. –

Cuestiones relacionadas