assert() Function
선언 |
<assert.h> or <cassert> |
정의 |
#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) ) |
설명 |
매크로로서 인수가 0과 같으면 메세지가 표준 오류 장치에 기록되고 프로그램을 중단시킵니다. 그렇다고 해서 빌드 자체가 안되는 것은 아닙니다. VS2013에서 Release모드랑 Debug 모드로 빌드는 잘되었습니다. 주로 사용은 디버깅 용도로 사용하면 되는데 실제 릴리즈에서는 해당 Funtion의 기능을 끄고 다른 방법으로 대처해나가야합니다. assert 만나서 실행 중지되면 사용자들에게 막대한 피해를 줄수 있습니다. |
파라미터 |
평가할 데이터를 넣으면 됩니다. |
반환값 |
없습니다. |
일단 해당 매개변수에 0이 들어가면 에러를 어떻게 표시하는지 아래 텍스트를 보도록 합니다.
Assertion failed: expression, file filename, line line number
에로 표시로 매개변수 입력, 소스파일, 에러 발생 라인 수를 표시해 줍니다.
아래는 테스트 했던 소스 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> #include <Windows.h> //#define NDEBUG //항상 cassert 앞에 있어야 assert 함수가 작동을 안합니다. #include <cassert> int main(_In_ int _Argc, _In_reads_(_Argc) _Pre_z_ char ** _Argv, _In_z_ char ** _Env) { int test_num = 1; int *test_point = NULL; assert(test_point); system("Pause"); return 0; } | cs |
assert에 NULL값 즉 (0)이 들어가서 에러가 발생합니다.
참고로 파라미터에 0이 들어가도 에러 발생 하지 않도록 하려면 위에 예제에 주석으로 표시된 부분을 풀면 됩니다.
#define DNEBUG
%사용시 주의 점은 <cassert> 위에 적어두어야 제대로 assert 함수가 작동을 안합니다.
아래 처럼 assert 문을 바꾸어면 TRUE가 되어 작동을 안합니다.
1 | assert(test_point == NULL); | cs |
아래처럼 사용하면 에러 발생시 주석효과도 볼수 있습니다.
1 | assert(test_point != NULL && "test_point == NULL"); | cs |
그럼 오늘은 assert 함수에대해 간략하게 살펴보았습니다.
'Language & API > C_기초' 카테고리의 다른 글
isdigit(_In_ int _C) 사용법 (0) | 2017.05.22 |
---|---|
iscntrl(_In_ int _C) 사용법 (0) | 2017.05.19 |
isblank(_In_ int _C) 사용법 (0) | 2017.05.19 |
isalpha(_In_ int _C) 사용법 (0) | 2017.05.19 |
isalnum(_In_ int _C)사용법 (0) | 2017.05.18 |