단언 C++

단언 C++

2022-06-04 last update

5 minutes reading C++
C++ 언어는 프로그래머가 논리적으로 부정확할 수 있는 조건이나 문장을 검사할 수 있도록 단언 문장을 제공합니다.오늘의 이 C++ 문장에서, 우리는 예시에서 "assert"문장을 사용하여 논리적인 문제가 발생할 때 잘못된 작업 방식을 설명할 것이다.만약 당신이 이런 문장을 디버깅하는 데 도움을 찾고 있다면, 이 문장을 가지고 있는 것은 다행입니다."Ctrl + Alt + T"단축키로 Ubuntu 20.04 시스템의 셸 컨트롤러 프로그램을 열고 새 C+ + 글을 시작합니다.
터미널에 새 C++ 파일을 생성합니다.이것은 셸의 검색 "touch"를 사용해야 합니다.따라서 이 목적에 대한 조회는 아래 이미지에 표시됩니다.

현재 이 파일은 Linux 시스템의 주 파일 자원 관리자에 설치되어 있습니다.설치된 편집기 중 하나 (즉vim, text 또는nano) 에서 이 c++ 파일을 열어야 합니다.따라서 GNU Nano 편집기를 선택해 왔습니다.이 새 파일을 여는 명령은 다음과 같습니다.

예 01


C++ 코드에서 assert 문장을 사용하여 일부 코드 문장의 논리를 검증하는 첫 번째 예시부터 시작합니다.우리는 이미 헤더 파일로 코드를 시작했다.C++ 플랫폼에서 작업할 때 입력 출력 헤더를 추가해야 합니다.C++에서 표준 이름 공간은 필수입니다. 키워드'using'과'Std'가 포함되어 있습니다. 그림에서도 볼 수 있습니다."assert"문장 사용자에게 우리는 assert의 헤더 파일을 추가하여 정상적으로 작동하도록 해야 합니다.따라서 "#include"키워드가 있는 "Assert.h"헤더 파일을 추가했습니다.main () 메서드가 실행되었습니다.
우리는 이미 "val"이라는 정수 변수를 초기화했는데, 그 값은 13이다.다음 연속 줄에서 변수 "val"은 다른 값 15로 덮어썼습니다.이후 assert 문장을 사용하여 변수 "val"이 값 13인지 확인합니다.논리적으로 올바르지 않고 변수 "val"이 값 15로 덮어쓰기 때문에 이상을 일으킬 수 있습니다."Ctrl+s"를 사용하여main() 함수를 완성한 후 코드를 저장합니다.저장한 후 터미널로 돌아가서 "Ctrl + X"를 사용하여 컴파일하고 실행해야 합니다.

C++ 코드 컴파일의 경우 Ubuntu 20.04 시스템에 일부 컴파일러를 설정해야 합니다.따라서 우리는 셸의 g++ 컴파일 명령을 사용하여 파일'assert.cc'를 컴파일해 왔습니다.컴파일은 어떤 결과도 되돌려 주지 않는다. 이것은 코드가 전체 과정에서 문법이 정확하다는 것을 똑똑히 보여준다.콘솔에서 영구적인 ".a.out"명령을 사용하여 파일을 실행합니다.실행 파일이 false로 되돌아오기 때문에 오류가 발생했습니다.출력은 붙여넣은 이미지에 표시됩니다.

assert 문장 출력의 단언 오류를 피하려면 C++ 코드에서 No Debug 로고를 정의해야 합니다.이를 위해서는 제목 영역에서 키워드 "define"과 해시 기호, 그리고 "NDEBUG"를 로고로 사용해야 합니다.따라서 우리는 같은 파일을 열었고 "io"헤더 파일 다음에 이름 공간을 추가했습니다.표준 이름 공간 다음에 제목에 "NDEBUG"로고를 정의하고 그 뒤에 "assert.h"제목을 사용했습니다.아래에 표시된 제목 순서를 변경하지 마십시오.main () 함수에 출력에cout 문장을 추가했습니다. 단언 해제가 성공했습니다.

셸에서 업데이트된 코드를 다시 컴파일하고 실행합시다.이렇게 한 후에 제목 영역에서 "NDEBUG"를 사용함으로써 우리는 이번에 어떠한 오류도 발생하지 않았다.

예 02


C++ 코드에서 assert 문장을 사용하는 새로운 예시를 보여 드리겠습니다.그러나 이번에는 일부 사용자가 정의한 함수에서 assert 문장을 사용할 것입니다.따라서 우리는 코드의 시작에 순서대로 헤더 파일과 표준 이름 공간을 추가했다.이름이'show()'인 사용자정의 방법이 선언되어 있으며, 매개 변수에 정형 포인터 값을 사용합니다.
show () 함수에서, 우리는 입력된 매개 변수의 바늘이 NULL인지 확인하기 위해 "assert"문장을 사용하고 있습니다.null이면 오류가 발생합니다.그리고cout 문장은 바늘'v'가 가리키는 변수의 값을 표시합니다.main 함수에서, 우리는 값이 13인 정수 변수 "val"을 초기화했다.두 개의 포인터 "a"와 "b"가 NULL로 초기화되었습니다.변수 "val"의 주소가 포인터 "a"와 연결되었습니다.각각 전달 포인터'a'와'b'를 사용하여 show () 함수를 호출하여 다른 결과를 출력합니다.show 함수의 두 번째 호출은 빈 바늘을 사용하고 assert 문장은false로 되돌아오기 때문에 이상을 일으켜야 합니다.코드를 저장하고 실행합시다.

이 코드를 실행한 후, 우리는 위에서 토론한 것과 같은 결과를 얻었다.이것은 첫 번째 함수 호출 결과 13, 즉 전달된 바늘'a'를 표시하고, 다른 함수 호출 오류를 표시합니다.

이 오류를 수정하려면 바늘'b'와 변수'val'을 연결하면 됩니다.따라서 우리는 아래에 표시된 코드에서도 같은 조작을 했다.우리는 변수 "val"을 v1로 교체하고 다른 변수 "v2"를 추가했습니다.변수 v1은 바늘 "a"와 연결되었고, v2는 바늘 "b"와 연결되었습니다.전체 스크립트는 그림과 같이 유지됩니다.

코드 디버깅과 실행 후 지금까지 오류가 발견되지 않았습니다.v1과 v2 변수의 값이 모두 성공적으로 표시됩니다. 아래와 같습니다.

예 03


C++ 코드 중 마지막이지만 가장 중요하지 않은 assert 문장 예시로 끝내겠습니다.코드는 두 개의 assert 문장과cout 문장을 포함합니다.첫 번째 assert 문장은 곱셈이 같은 출력을 만드는지 검사합니다.조건이 논리적으로 정확하기 때문에true로 돌아가야 하며 오류가 발생하지 않습니다.cout 문장을 실행합니다. 첫 번째 문장이 정확하다는 것을 보여 줍니다.다른 assert 문장은 양측의 곱셈이 같은 출력을 되돌려주는지 다시 한 번 검사합니다.출력이 다르기 때문에 논리적으로 정확하지 않다.따라서false로 돌아갑니다.따라서 오류가 발생합니다. 이후cout 문장을 실행하지 않습니다.

논리 오류로 인해 프로그램이 첫 번째cout를 실행한 후에 자동으로 종료됩니다.

이 문제를 해결하기 위해서, 우리는 코드에 "NDEBUG"로고를 사용할 것이다. 우리가 지금까지 한 것처럼.

이번에는 오류가 표시되지 않았고 두 개의cout 문장이 실행되었습니다.

결론


이 글은 모두 C++ 단언 문장의 용법에 관한 것이다.우리는 main () 함수와 사용자 정의 함수를 통해 그 작업을 보여 주려고 노력했다.C++에서 단언을 비활성화하는 방법, 즉 NDEBUG 플래그도 논의했습니다.우리는 모든 예가 당신에게 커다란 도움을 제공할 수 있기를 바랍니다.