본문 바로가기

Programming/C,C++

[C/C++] assert 란

반응형

백준 알고리즘을 풀다보니 이런 말이 있었다.

"이렇게 했더니 맞고 이렇게 했더니 틀린다"가 아니라 assert문으로 확실하게 확인해 주시기 바랍니다.

문제를 풀다보면 테스트케이스에서는 다 맞는데 막상 제출하면 틀리는 경우가 있다. 이 경우 문제에 오류가 있나 라고 생각하기 쉬운데 사실 문제에 오류가 있는것이 아니라 내 코드가 test case에서만 통과되는거지 다른 숨겨진 case에 대해서는 실패하는 경우이다.

즉, 내 소스에 디버깅이 확실히 되어있지 않다는 점이다.

확실하게 디버깅하기 위해서는 assert문으로 확실하게 확인해 달라고 하였는데 과연 assert가 무엇일까?

assert란 개발자들이 디버깅을 빠르게 하기위한 도구이다. 즉, 에러 검출용 코드이지 코드를 다 완성하고 동작할때 돌아가는 함수가 아니다.

assert는 log보다 더 효율적으로 사용될 수 있는데 이유는 버그가 발생한 위치, call stack등 여러 정보를 알 수 있기 때문이다.

또한 assert는 디버깅용 함수이기 때문에 Release 모드에서는 동작하지 않고 디버그 모드에서만 동작한다.

assert에 대한 구체적인 설명과 사용법은 다음을 참조하자.

 

https://blockdmask.tistory.com/286

 

[C언어/C++] assert 함수에 대해서 : 디버깅을위한, 더 안전한 코드를 위한 오류 검출 방법

1. C/C++ assert함수란? - 간단하게 말하자면 assert 함수는 디버깅 모드에서 개발자가 오류가 생기면 치명적일 것이라는 곳에 심어 놓는 에러 검출용 코드입니다. - 예를들어서 int score 가 음수가 나오면 절대..

blockdmask.tistory.com

https://dojang.io/mod/page/view.php?id=764

 

C 언어 코딩 도장: 85.21 assert 사용하기

assert 매크로는 assert.h 헤더 파일에 정의되어 있으며 정해진 조건에 맞지 않을 때 프로그램을 중단합니다. 즉, assert에 지정한 조건식이 거짓(false)일 때 프로그램을 중단하며 참(true)일 때는 프로그램이 계속 실행합니다. 단, NDEBUG 매크로가 정의되어 있으면 assert는 무시됩니다. 그러므로 Visual Studio에서는 Debug 모드에서만 동작하며 Release 모드에서는 동작하지 않습니다. 예를 들어 포인터가 NULL

dojang.io

 

반응형