Please Enable JavaScript!
Gon[ Enable JavaScript ]

묵시/명시 적인 형변환과 Overflow 체크 방법

기타 언어/C# & MFC
반응형
묵시적인 형변환은 캐스팅을 할필요없이 대입만 시켜주면 자동으로 들어간다.
작은 크기의 value 가 큰 크기의 value  속에 들어간다면 이것이 가능하나
큰 크기의 value 가 작은 크기의 value type 에 들어간다면 casting 을 해줘야한다.
묵시적인 형변환이 가능한 관계도의 그림이다

위에서 말했듯이 명시적인 캐스팅을 하게 되면 아래와 같은 경우 출력형태가 틀려질수 있다

long longValue = Int64.MaxValue;

int intValue = (int)longValue;


크기가 큰 long 이 int 로 캐스팅이 되게 되면 엉뚱한 값이 들어가게 된다.
-1 이라는 엉뚱한 값이 출력된다. 이 소스를 출력한 값이다

이것은 에러이다. 작성자가 없하는 의도는 아닐것이다. 그러면 이것을 체크해서 에러인지 알아내야하는데
이 검사를 해주는것이 Overflow 를 검사하는 checked 구문을 사용한다.
이 구문을 사용해서 문장을 완성해 보도록 한다. 여기엔 try/catch 구문을 사용해 Exception 예외로
에러를 걸러 낼것이다.

class Program{

        public static int Main(string[] args){

            try{

                long longValue = Int64.MaxValue;

                int intValue = 0;

                checked {

                    intValue = (int)longValue;

                }

                Console.WriteLine("{0},{1}", longValue, intValue);

            }

            catch (Exception ex){

                Console.WriteLine(ex.Message);

            }

            return 0;

        }

    }

이와같이 캐스팅에서 발생할수 있는 문제를 checked 구문을 사용해서

에러를 미연에 방지할수 있다.







반응형
Posted by 녹두장군1
,