문제

시스템을 만들고 있습니다. 내가 알고 싶은 것은 MSG가 지원되지 않으면 무엇을해야합니까? 지원되지 않는 MSG를 던져야합니까? 0 또는 -1을 반환해야합니까? 또는 errno (base-> errno_)를 설정해야합니다. 오류가 있으면 신경 쓰지 않는 일부 메시지 (예 : SetborderColour). 다른 사람들 (AddText 또는 Save CMD를 생성하면 저장).

1) 코딩 2) 디버깅 3) 확장 및 유지 보수에 가장 적합한 방법이 무엇인지 알고 싶습니다. 디버깅을 3 위로 만들 수 있습니다. ATM 디버그하기 어렵지만 BC는 채우지 않은 코드가 많이 있습니다. 실제 버그는 수정하기가 어렵습니다. 사용자에게 오류가 있음을 알리는 가장 좋은 방법은 무엇입니까?

시스템은 이와 같은 기능을 수행하지만 정확히 동일하지는 않습니다. 이것은 C 스타일이고 MyCode는 settext (const char*text) {msg (this, esettext, text)를 랩핑하는 인라인 함수가 많이 있습니다.

Base base2, base;
base = get_root();
base2 = msg(base, create, BASE_TYPE);
msg(base2, setText, "my text");
const char *p = (const char *)msg(base2, getText);
도움이 되었습니까?

해결책

일반적으로 C ++ 인 경우 성능이 중요하지 않거나 예외를 지원하지 않는 환경 (예 : 임베디드 플랫폼)에서 실행되지 않는 한 예외를 선호합니다. 예외는 발생할 때 매우 눈에 띄고 무시되기 때문에 디버깅에 가장 적합한 선택입니다. 또한 예외는 자체 문서화입니다. 그들은 자신의 유형 이름과 일반적으로 오류를 설명하는 포함 된 메시지를 가지고 있습니다. 리턴 코드 및 errno에는 별도의 코드 정의와 주어진 컨텍스트에서 코드가 의미하는 바를 통신하는 일종의 대역 (예 : 사람 페이지, 주석)이 필요합니다.

빠르게 코딩하려면 리턴 코드가 자신의 예외 유형을 잠재적으로 정의 할 수 없기 때문에 더 쉬울 수 있으며 종종 오류 확인 코드는 예외와 같은 장점이 아닙니다. 그러나 물론 큰 위험은 오류 반환 코드를 조용히 무시하는 것이 훨씬 쉽고, 발생한 후에까지 눈에 띄지 않을 수있는 문제가 발생하여 디버깅 및 유지 보수를 악몽으로 만듭니다.

오류가 발생하기 쉽기 때문에 Errno를 사용하지 마십시오. 그것은 글로벌이므로 누가 재설정하는지 알지 못하고 가장 확실하게 ~ 아니다 스레드 안전합니다.

편집하다: 나는 당신이 C 스타일의 Errno가 아닌 Errno 회원 변수를 의미한다는 것을 깨달았습니다. 그것은 글로벌이 아니라는 점에서 더 낫지 만, 앱이 멀티 스레드 인 경우 스레드를 안전하게 만들기 위해 추가 구성이 필요하며 반환 코드의 모든 문제를 유지합니다.

다른 팁

오류 코드를 반환하려면 오류 코드를 명시 적으로 확인한 다음 전달해야하므로 징계가 필요합니다. 우리는이 접근법을 사용한 대형 C 기반 시스템을 작성했으며 모든 "손실 된"오류를 제거하는 데 시간이 걸렸습니다. 우리는 결국이 문제를 포착하는 몇 가지 기술을 개발했습니다 (예 : 스레드 글로벌 위치에 오류 코드를 저장하고 최상위 레벨에서 검사하여 반환 된 오류 코드가 저장된 오류 코드와 일치하는지 확인).

코드를 작성하고 오류를 처리하는 방법을 잘 모르기 때문에 예외 처리가 더 쉽게 코딩하기가 더 쉽습니다. 오류를 처리하는 방법이 확실하지 않으면 위쪽으로 전파 할 수 있습니다 (확인 된 예외를 처리 해야하는 경우 Java를 사용하지 않는다고 가정). . 예외가 발생한 위치에 대한 스택 추적을 얻을 수 있기 때문에 디버깅에 더 좋습니다 (그리고 최상위 예외 핸들러를 구축하여 다른 곳에서 잡힌 문제를 포착 할 수 있기 때문입니다). 일을 제대로 한 경우 문제를 더 빨리 알게되므로 유지하는 것이 좋습니다.

그러나 예외 처리와 관련된 몇 가지 설계 문제가 있으며 잘못되면 더 나빠질 것입니다. 요컨대, 예외를 처리하는 방법을 모르는 코드를 작성하는 경우 전파해야합니다. 너무 많은 코더는 오류를 트랩하여 예외를 변환 한 다음 재조정하여 스파게티 예외 코드가 발생하여 때때로 문제의 원래 원인에 대한 정보를 잃어 버립니다. 이것은 최상위 레벨 (진입 점)에 예외 처리기가 있다고 가정합니다.

개인적으로 출력 그래픽에 관해서는 침묵의 실패가 괜찮다고 생각합니다. 그것은 단지 당신의 사진을 잘못 만듭니다.

그래픽 오류는 어쨌든 발견하기 쉽습니다.

개인적으로, 나는 그것이 순수한 'c'라면 기본 구조물에 errno를 추가 할 것입니다. 이것이 C ++라면 예외를 던질 것입니다.

이 오류가 얼마나 '치명적'인지에 달려 있습니다. 사용자는 실제로 오류를 볼 필요가 있습니까, 아니면 다른 개발자 교화를위한 것입니까?

유지 관리를 위해서는 발생할 수있는 오류를 명확하게 문서화하고 오류 처리의 명확한 예를 포함해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top