개인 재정 C ++에서 인형을 피하는 10 가지 방법 - 인형

C ++에서 인형을 피하는 10 가지 방법 - 인형

차례:

비디오: How Computers Calculate - the ALU: Crash Course Computer Science #5 2024

비디오: How Computers Calculate - the ALU: Crash Course Computer Science #5 2024
Anonim

처음부터 C ++ 프로그램을 실제로 작성하는 것보다 버그를 검색하고 제거하는 데 더 많은 시간을 할애한다는 것은 불행한 사실입니다. 여기에 제시된 내용은 프로그래밍을보다 즐겁게 만들어주기 위해 프로그램에 도입 한 오류의 수를 최소화하는 데 도움이 될 수 있습니다.

모든 경고 및 오류 메시지 사용

C ++ 구문은 많은 오류 검사를 허용합니다. 컴파일러가 해독 할 수없는 구문을 발견하면 메시지를 출력 할 수밖에 없습니다. 소스 코드와 백업을 동기화하려고 시도하지만 (때로는 성공적이지 못함) 실행 파일을 생성하지 않습니다. 이렇게하면 프로그래머가 모든 오류 메시지를 수정해야합니다.

경고를 무시하거나 무시하는 것은 아주 나쁜 생각입니다. 그것이 당신을 괴롭히기 때문에 당신의 차 대쉬 보드에 "체크 엔진"표시 등을 뽑는 것과 같습니다. 문제를 무시한다고해서 문제가 해결되는 것은 아닙니다.

깨끗하고 깔끔하고 익숙한 스타일을 따르는 코드를 읽으면 C ++ 구문의 구문을 파싱하는 데 약간의 두뇌 능력을 소비합니다. 이것은 프로그램이하려고하는 것이 아니라 그것을하는 방법을 해독 할 수있는 뇌의 CPU 능력을 더 많이 남겨 둡니다.

클래스 이름, 객체 이름 및 함수 이름을 구별합니다.

클래스, 함수 또는 객체가 사용 된 것을 이해합니다.

좋은 코딩 스타일을 사용하면 다음을 쉽게 수행 할 수 있습니다. 이름에 따라

C + + 기호와 선행 프로세서 기호 구분 (#define 개체가 두드러 져야 함)

같은 수준의 C ++ 코드 블록 식별 (일관된 들여 쓰기의 결과 임)

  • 또한 각 모듈의 기능이나 클래스, 작성자, 날짜, 버전 및 수정 내역에 대한 정보를 제공하는 모듈 헤더의 표준 형식을 설정해야합니다.

  • 한 프로젝트에 참여하는 모든 프로그래머는 동일한 코딩 스타일을 사용해야합니다. 다른 코딩 스타일의 패치 워크로 작성된 프로그램은 혼란스럽고 전문가가 아닌 것처럼 보입니다.

  • 코드를 작성하는 동안 코드 주석 작성

  • 모든 것이 작동 될 때까지 기다린 후 주석으로 돌아가서 주석을 추가하는 대신 코드를 작성하는 동안 주석을 작성하면 오류를 피할 수 있습니다.

공식적인 의견은 당신이하려는 일을 재고 할 것을 강요합니다. 짧은 주석은 나중에 읽었을 때와 작성할 때 모두 깨닫게됩니다. 다른 프로그래머와 이야기하는 것처럼 주석을 작성하십시오.

디버거의 모든 경로를 한 번 이상 단일 단계로 실행

프로그래머는 프로그램이하는 일을 이해해야합니다. 프로그램이 예상 값을 출력하는 것으로는 충분하지 않습니다. 프로그램이하는 모든 것을 이해해야합니다.

싱글 스텝핑 () 프로그램보다 더 나은 느낌을주는 프로그램이 아니며, Code:: Blocks와 함께 제공되는 좋은 디버거를 사용하여 단계별로 실행합니다. 그 외에, 프로그램을 디버깅 할 때, 프로그램이 실행될 때 생길 수있는 기괴한 행동을 알아 내기 위해 원료가 필요합니다. 서비스가 시작될 때마다 각 기능을 단일 단계로 수행하는 것보다 재료를 더 잘 제공하는 것은 없습니다. 마지막으로, 기능이 완료되고 프로그램에 추가 될 준비가되면, 모든 논리 경로가 최소한 한 번 이동해야합니다. 버그는 함수의 나머지 부분과 함께 폿에 던져진 후에가 아니라 함수 자체를 검사 할 때 훨씬 쉽게 찾을 수 있습니다. 그러면 버그가 새로운 프로그래밍 문제로 옮겨 갔을 것입니다.

가시성 제한

클래스 내부의 가시성을 외부 세계로 제한하는 것은 객체 지향 프로그래밍의 초석입니다. 클래스가 내부 상태를 책임 져야합니다. 클래스에서 실수가 발생하면 클래스 프로그래머의 잘못입니다. 응용 프로그램 프로그래머는 문제를 해결하는 것에 대해 걱정해야합니다.

특히 제한된 가시성은 데이터 멤버가 클래스 외부로 액세스 할 수 없어야 함을 의미합니다. 즉, 데이터 멤버는 보호 대상으로 표시되어야합니다. 또한 응용 프로그램 소프트웨어가 알 필요가없는 구성원 기능도 보호 대상으로 표시해야합니다. 작업을 완료하는 데 필요한 것보다 더 많은 클래스 내부를 노출시키지 마십시오. 힙 메모리 추적 힙 메모리 손실 추적은 현장에 출시 된 프로그램에서 치명적인 오류의 가장 흔한 원인이며 동시에 추적하고 제거하는 것이 가장 어려운 문제입니다. 이 오류 클래스는 찾기 어렵고 제거하기가 쉽기 때문에 구매하는 프로그램에 널리 퍼져 있습니다. 메모리 누수 크기에 따라 문제가 발생하기 전에 몇 시간 동안 프로그램을 실행해야 할 수 있습니다.

일반적으로 프로그래머는 항상 힙 메모리를 동일한 수준으로 할당하고 해제해야합니다. "멤버 함수 MyClass:: create ()가 힙 메모리 블록을 할당하고 호출자에게 반환하면 힙에 반환하는 멤버 MyClass:: release ()가 있어야합니다.특히, MyClass:: create ()는 부모 함수가 메모리를 해제 할 필요가 없어야합니다.

가능한 한 MyClass가 자체적으로 이러한 메모리 포인터를 추적하고 소멸자에서 삭제해야합니다.

포인터를 지운 후에 포인터를 제로로 만듭니다.

포인터가 더 이상 유효하지 않게 된 후에 포인터를 제로로 만듭니다. 그들에게 nullptr 값을 할당함으로써 그렇게한다. 이 작업의 이유는 경험에 따라 분명 해집니다. 힙에 반환 된 메모리 블록을 계속 사용하고 알 수 없습니다. 프로그램이 99 %의 시간 동안 정상적으로 작동하므로 블록을 다시 할당하고 프로그램이 작동하지 않는 경우의 1 %를 찾는 것이 매우 어렵습니다.

더 이상 유효하지 않은 포인터를 null로 지정하고 값을 저장하기 위해 포인터를 사용할 경우 (널 위치 또는 그 근처에 아무 것도 저장할 수 없음) 즉시 프로그램이 중단됩니다. 충돌은 좋지 않지만 문제가 발생하는 경우는 아닙니다. 문제는 거기에있다. 생산에 투입하기 전에 발견했는지 아닌지에 대한 질문 일뿐입니다.

예외 처리를위한 예외 사용

C ++의 예외 메커니즘은 오류를 편리하고 효율적으로 처리하도록 설계되었습니다. 일반적으로 오류 플래그를 반환하는 대신 오류 표시기를 throw해야합니다. 결과 코드는 쓰기, 읽기 및 유지가 더 쉽습니다. 게다가, 다른 프로그래머가 그것을 기대하고 왔고, 당신은 그들을 실망시키고 싶지 않을 것입니다, 그렇지 않습니까?

예외 사용을 실제 오류로 제한하십시오. 이 함수의 일상 생활의 일부인 경우 "작동하지 않음"표시기를 반환하는 함수에서 예외를 throw 할 필요는 없습니다.

소멸자를 가상으로 선언하십시오.

생성자가 객체가 궁극적으로 종료 될 때 반환되어야하는 힙 메모리와 같은 자원을 할당하는 경우 클래스의 소멸자를 만드는 것을 잊지 마십시오. 소멸자를 만들었 으면, 그것을 가상으로 선언하는 것을 잊지 마십시오.

"하지만,"내 수업은 어떤 것도 상속받지 않으며 다른 수업에서 하위 클래스로 분류되지도 않습니다. "예,하지만 앞으로

기본 클래스가 될 수 있습니다. 소멸자를 가상으로 선언하지 않은 좋은 이유가 없다면 먼저 클래스를 만들 때 그렇게하십시오.

복사 생성자 및 오버로드 된 대입 연산자 제공

클래스에 소멸자가 필요한 경우 거의 확실하게 복사 생성자와 오버로드 된 대입 연산자가 필요합니다. 생성자가 힙 메모리와 같은 리소스를 할당하면 기본 복사 생성자 및 할당 연산자는 동일한 리소스에 대한 여러 포인터를 생성하여 혼란을 일으킬뿐입니다.

이러한 객체 중 하나의 소멸자가 호출되면 자산을 복원합니다. 다른 사본을위한 소멸자가 따라 올 때, 그것은 일을 망칠 것이다.

C ++에서 인형을 피하는 10 가지 방법 - 인형

편집자의 선택

Dragon Go! iPhone 및 iPad 용 앱 - 인형

Dragon Go! iPhone 및 iPad 용 앱 - 인형

Dragon Search를 사용하시는 분이라면 Dragon Go를 사용하는 것이 좋습니다! Nuance는 iPhone 3GS, iPhone 5, iPhone 4, iPod touch (3 세대), iPod touch (4 세대) 및 iPad에서 사용할 수 있도록 무료로 다운로드 할 수있는이 앱을 만들었습니다. (iOS 4.0 이상이어야합니다.) Android 기기에서도 사용할 수 있습니다. 드래곤가! ...

드래곤에서 피할 수있는 10 가지 실수 말하기 - 인형

드래곤에서 피할 수있는 10 가지 실수 말하기 - 인형

모두가 실수를 저지르고 어떤 사람들은 정말 크고 재미있게 만든다. 실수. NaturallySpeaking을 사용하여 많은 실수를 저 지르므로 때때로 수시로 일부를 만들 수도 있습니다. 내가 묻는 것은 다음과 같습니다. 내가 미리 짐작했던 10 가지 분명한 실수를하지 마십시오. 원래의 수. 창조적으로 행동하십시오. 거기서 나가서 ...

NaturallySpeaking을위한 10 가지 시간 절약 팁 - 인형

NaturallySpeaking을위한 10 가지 시간 절약 팁 - 인형

때로는 잘하고 그냥 사용하는 것의 차이 새로운 소프트웨어는 더 지혜롭고 경험 많은 스승의 충고 한 부분입니다. 누군가가 당신에게 전에 말했었 으면 좋을 10 가지가 있습니다. 대화 상자의 단축키 사용 대화 상자, 라디오 버튼, 확인란의 다양한 기능 ...

편집자의 선택

Google SketchUp 8에서 새로운 지형 모델을 만드는 법 - Google에서 모델링 할 때 인형

Google SketchUp 8에서 새로운 지형 모델을 만드는 법 - Google에서 모델링 할 때 인형

SketchUp을 사용하면 지형을 만들어야 할 수 있습니다. 건물에 대한 패치를 모델링하든 센트럴 파크를 다시 디자인하든 기존 데이터로 지형을 모델링 할 수 있습니다. 기존 데이터는 일반적으로 등고선 또는 토폴 라인 형태로 도착합니다. 지형지도에서 볼 수있는 삐걱 거리는 선을 알고 있습니다.

SketchUp에서 드레이프로 경로와 도로를 만드는 법 - 스케치 업에서 드레이프 도구

SketchUp에서 드레이프로 경로와 도로를 만드는 법 - 스케치 업에서 드레이프 도구

드레이프 도구가 작동 함 쿠키 커터와 조금 같다. 그것을 사용하여 객체의 가장자리를 직접 그 아래에있는 다른 표면으로 전송합니다. 아마도 당신은 부드럽게 경 사진 지형을 가지고 있으며, 당신은 그것에 사행 경로를 그리기를 원할 것입니다. 경로는 윤곽선을 따라야합니다.

SketchUp 모델을 3D 인쇄 용 부품으로 자르는 방법 - 인형

SketchUp 모델을 3D 인쇄 용 부품으로 자르는 방법 - 인형

SketchUp 모델 자르기 Intersect Faces 도구를 사용하여 그룹을 결합하는 것과 매우 유사합니다. 더 큰 오브젝트와 교차하여 커팅의 새 가장자리가 될 커터로 지오메트리를 사용할 것입니다. 모델이 매우 단순하고 SketchUp을 사용하는 경우 ...

편집자의 선택

Route Prefix를 사용하여 Junos - dummy에서 라우팅 필터를 생성하는 방법

Route Prefix를 사용하여 Junos - dummy에서 라우팅 필터를 생성하는 방법

라우팅 정책은 특정 경로가 라우팅 테이블에 수용되거나 일부 인접 라우터에 보급되는 것을 방지하기위한 것입니다. 경우에 따라 특정 경로 또는 경로 집합을 일치시키는 것이 유용 할 수 있습니다. 이렇게하려면 경로 필터를 사용합니다. 경로 필터는 특정 IP 주소 또는 접두어 범위에서 일치합니다. ...

Junos 라우터에서 COS의 코드 포인트 별명을 사용하는 방법 - 인형

Junos 라우터에서 COS의 코드 포인트 별명을 사용하는 방법 - 인형

전달 수업은 고통 스러울 수 있습니다. 더 좋은 방법은 코드 포인트 별칭을 사용하는 것입니다. CoS (Class of Service) 정책을 결정할 때 비트 패턴을 지정하는 대신 비트 패턴을 나타내는 별칭 이름을 정의 할 수 있습니다. 이러한 별칭을 코드 포인트 별칭이라고합니다. 간단히 말하자면 코드 포인트를 사용하십시오 ...

Junos 라우팅 정보를 요약하는 방법 - 더미

Junos 라우팅 정보를 요약하는 방법 - 더미

때때로 라우팅 정보를 간단하게 요약 할 수 있습니다 라우터. 예를 들어, 네트워크에서 OSPF를 방금 구성 했으므로 라우팅 테이블에 특정 수의 OSPF 경로가 표시 될 것으로 예상됩니다. show route summary 명령을 실행하여 모든 경로를 볼 수 있습니다 ...