2016-12-04 7 views
-1

나는 항상이 문장의 변화의 일종을 참조하십시오. 내 질문은 누군가가 어설 션() 이상 오류 검사 의이 방법을 선호 해야하는 때입니까? 몇 가지 구체적인 예가 무엇입니까? 내 생각에, assert()는 널 또는 잘못된 값이 왜 처음에 변수에 전달되었는지 자주 묻는 것이므로 대부분의 경우 더 안전한 선택 일 것입니다. 이 점에서 if (! expr) 문을 사용해야합니까?if (! someVar)와 assert()는 언제 사용해야합니까? 코드 내</p> <pre><code>if(!someVar)// or whatever expression { someVar = new type; //or however the programmer wants to handle it } </code></pre> <p>:

배경에 대해 저는 C++과 assert.h 헤더로 작업하고 있습니다.

+1

'assert()'는 디버그 빌드에만 적용되고 프로그램을 중단합니다. 릴리스 빌드에서는 확인이 이루어지지 않습니다. 따라서'assert()'는 온 전성 검사에 사용되지만 프로그램 논리에는 사용되지 않습니다. 참조 : https://stackoverflow.com/questions/1571340/what-is-the-assert-function – Galik

답변

1

제공된 코드 샘플에서 프로그래머는 someVar를 확인하고 someVar이 부울 false로 평가되면이를 변경합니다. 오류 검사 개념 내에서이 오류를 복구 할 수있는 오류로 간주 할 수 있습니다 (오류는 someVar의 값을 변경하여 해결할 수 있음)

Assert를 사용하면 someVar가 true이거나 틀린 너는 회복 할 수 없다. 일반적으로 이것은 디버그 빌드에서만 실행되며 조건이 거짓이면 프로그램이 종료됩니다.

0

오류가 발생하면 assert은 프로그램을 중단합니다. 그러나, 당신은 항상 그것을 원하지 않습니다. 예를 들어, 사용자에게 오류를 알리고 작업을 저장할 수있는 기회를 제공하는 대화 상자를 열려고 할 수 있습니다.

오류 처리에 대한 일반적인 선택은 예외를 throw하는 것입니다. 그들이 이 잡힐 수 있기 때문에 예외가 크지 만 잡히지 않으면 여전히 assert처럼 프로그램을 크래시합니다.

+4

일반적으로 'assert'는 릴리즈 빌드에서 아무 작업도하지 않습니다. – juanchopanza

+0

_ "그들이 잡히지 않으면, 그들은 여전히 ​​어설프트처럼 프로그램을 충돌시킵니다."_ "훌륭하지 않습니다" –

+0

대부분의 사람들은 그렇다고 말할 것입니다. 적어도 C 에러 처리보다 낫습니다. 에러를 처리하지 않으면 아무 일도 일어나지 않습니다. 그리고 1000 라인 후에 프로그램은 아무런 이유없이 잘못된 것을합니다. – IanPudney