ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래밍을 위하여 - 0x03 "경고와 오류"
    Legacy/C&C++ 2015. 6. 10. 08:47
    728x90

    경고(Warning)와 오류(Error)

    우리가 프로그래밍을 하면서 수많은 경고와 오류를 접하게 된다. 그런데 "경고는 무엇이고 오류는 무엇인가? 둘은 같은 것이 아니었나?"라고 생각하는 사람도 있을 것이다. 실제로 조금 프로그래밍을 배운 사람들도 이 두 단어를 혼동해서 사용하고 있는 경우를 종종 발견할 수 있다. 하지만 '경고'와 '오류'는 엄연히 다른 단어이다. (글자 생김새부터 다르지 않은가? :-) )


    우선 경고에 대해서 알아보자.

    경고(Warning)란 "컴파일은 가능하지만 문제가 발생할 수 있다." 라는 의미이다.

    대표적인 예로 Visual Studio 2010에서의 scanf 함수를 살펴보자. 우리는 scanf를 사용하여 코드를 작성하여 F5를 눌러 컴파일을 하면 다음과 같은 메시지를 확인할 수 있다.


    c:\users\jun\documents\visual studio 2010\projects\test\test\test.cpp(5): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.




    visual studio의 경고와 오류메시지는 이곳에서 확인할 수 있다.



    다양한 종류의 경고들


    영어라서 해석이 어렵지만 scanf라는 함수 또는 변수(여기서는 함수 되시겠습니다.) 안전하지 않으므로, 대신 scanf_s를 사용해 볼 것을 권하고 있다. 이렇게 경고(warning)을 띄워서 이 코드가 문제를 일으킬 수도 있지만 일단 컴파일은 시켜주는 것이 경고이다. 경고가 등장하는 경우는 아주 다양하다. 또 언어마다 다르며 컴파일러마다 다르다. 예를들어 short(2byte)에 int(4byte)를 넣는 것처럼 값이 잘려버릴 수 있는 코드에 대해서 C에서는 경고로 처리하지만, 자바에서는 이것을 경고가 아닌 오류(Error)로 처리한다.


    오류(Error)는 "문법적으로 틀려서 컴파일 할 수 없다."라는 의미이다. (여기서 하나 짚고 넘어가지 않을 수 없는데, 사실 문법적으로 틀리지 않은 오류도 있다. 문법적으로 틀리지 않았는데 발생하는 오류를 '논리적 오류'라고 말하며 이는 프로그램의 흐름상에서 논리적으로 문제가 되는 부분이 있어 실행 도중에 발생하는 오류를 의미한다. -ex.. 초기화, 잘못된 배열 인덱스 참조 등등- 여기서 말하는 오류란 '문법적인 오류'를 의미한다고 생각하자. 문법적 오류와 논리적 오류에 대해서 다른 글에서 다루도록 하겠다.)


    다음은 대표적으로 발생할 수 있는 오류의 예시이다. 바로 세미콜론(;)을 빼먹어서 발생한 오류다. 이러한 문법적 오류는 아래 그림에서도 볼 수 있는 것처럼 빨간줄을 그어준다. (여기도 마찬가지로 문법적 오류인 경우만 컴파일러가 찾아준다는 것이 중요하다. 논리적 오류를 찾아내는 것이야말로 프로그래머의 몫이다.)





    아주 간단하게 경고와 오류에 대해 알아보았다. 이 글을 보고 경고와 오류가 어떻게 다르다는 것만 알았다고 해도 큰 발전이다. 크게 어려운 개념도 아니고 하니 절대 잊지 말고 기억하도록 하자. 다음 글에선 위에서 언급한 문법적 오류와 논리적 오류의 차이, 그리고 컴파일 에러와 런타임 에러에 대해 알아보겠다.

Designed by Tistory.