19

I was working around with C# and noticed that when I had a very large integer and attempted to make it larger. Rather that throwing some type of overflow error, it simply set the number to the lowest possible value (-2,147,483,648) I believe.

I was wondering if there was a way to enable the overflow checking in Visual Studio?

1 Answer 1

33

You can use the following steps to enable Arithmetic Overflow/Underflow checking in Visual Studio :

  1. Right click on your project in the Solution Explorer and select Properties.
  2. On the Build tab, click the Advanced button. (It's towards the bottom)
  3. Check the "Check for arithmetic overflow / underflow" check-box.

This will throw a System.OverflowException when the overflow occurs rather than it's usual operation of changing the value to a minimum value.

Without Arithmetic Overflow/Underflow enabled:

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

With Arithmetic Overflow/Underflow enabled:

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

Using a checked block:

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

The documentation for checked is available here. (Thanks to Sasha for reminding me about it.)

Sign up to request clarification or add additional context in comments.

7 Comments

You can also use the checked keyword to wrap a statement or a set of statements so that they are explicitly checked for arithmetic overflow. Setting the project-wide property is a little risky because oftentimes overflow is a fairly reasonable expectation.
Note that this compiler option only applies when there is no explicit checked or unchecked context in the code. Also, it will affect the resulting executable, not just debugging in Visual Studio. See here for documentation: msdn.microsoft.com/en-us/library/h25wtyxf%28v=VS.100%29.aspx
@Rionmonster and @Sasha - I didn't know about any of those two functionalities. Thanks to both.
Good point Sasha - I was just pulling up a short blog on the checked statement :) The link will follow shortly.
Note that you can also use "checked" in an expression context if you only want part of an expression to be checked, rather than a whole statement or group of statements.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.