unchecked 키워드

unchecked 키워드는 int 연산과 변환에서 오버플로우를 체크해줍니다.
이 키워드는 아래처럼 사용할수 있습니다.

unchecked (expression)

예제 1 )
// statements_unchecked.cs
// Using the unchecked statement with constant expressions
// Overflow is checked at compile time
using System;

class TestClass
{
   const int x = 2147483647;   // Max int
   const int y = 2;

   public int MethodUnCh()
   {
      // Unchecked statement:
      unchecked
      {
         int z = x * y;
         return z;   // Returns -2
      }
   }

   public static void Main()
   {
      TestClass myObject = new TestClass();
      Console.WriteLine(“Unchecked output value: {0}”,
         myObject.MethodUnCh());
   }
}

결과
Unchecked output value: -2

예제 2 )
// statements_unchecked2.cs
// CS0220 expected
// Using default overflow checking with constant expressions
// Overflow is checked at compile time
using System;

class TestClass
{
   const int x = 2147483647;   // Max int
   const int y = 2;

   public int MethodDef()
   {
      // Using default overflow checking:
      int z = x * y;
      return z;   // Compiler error
   }

   public static void Main()
   {
      TestClass myObject = new TestClass();
      Console.WriteLine(“Default checking value: {0}”,
         myObject.MethodDef());
   }
}

결과
The warning: The operation overflows at compile time in checked mode.

예제 3 )
// statements_unchecked3.cs
// CS0220 expected
// Using the checked statement with constant expressions
// Overflow is checked at compile time
using System;

class TestClass
{
   const int x = 2147483647;   // Max int
   const int y = 2;

   public int MethodCh()
   {
      // Checked statement:
      checked
      {
         int z = (x * y);
         return z;   // Compiler error
      }
   }

   public static void Main()
   {
      TestClass myObject = new TestClass();
      Console.WriteLine(“Checked value: {0}”, myObject.MethodCh());
   }
}

결과
The warning: The operation overflows at compile time in checked mode.

또한 int 값을 포인터로 변환할때 많이 사용됩니다.
        private static readonly IntPtr HKEY_CLASSES_ROOT = new IntPtr(unchecked((int)0x80000000));
        private static readonly IntPtr HKEY_CURRENT_USER = new IntPtr(unchecked((int)0x80000001));
        private static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(unchecked((int)0x80000002));
        private static readonly IntPtr HKEY_USERS = new IntPtr(unchecked((int)0x80000003));
        private static readonly IntPtr HKEY_CURRENT_CONFIG = new IntPtr(unchecked((int)0x80000005));


Leave a Comment