2013-08-14 2 views
0

이 질문은 기술적 인 것보다 철학적입니다. 그래서 나는 의도적으로 무슨 일이 일어나고 있는지 지저분한 내용을 남겨 두어도 괜찮습니까?C에서 클라이언트 오류와 프로그래머 오류를 구별합니다.

저는 특정 프로토콜에 대한 서버를 구현하는 팀에 있습니다. 클라이언트의 오류를 구분하는 방법 (예 : 열기 전에 요청 읽기)과 프로그래밍 오류 (예 : 초기화되지 않은 파일 핸들을 파일 시스템으로 전달). 프로토콜에는 오류를 다시 클라이언트에 반환하는 메커니즘이 있습니다. 안타깝게도 프로토콜 코드가 내부 오류 코드와 잘 일치하지 않습니다.

지금까지 헬퍼 함수를오고 갈 때마다 두 가지 오류 코드를 유지하면서 반환 할 때마다 두 가지 오류 코드를 모두 확인했습니다.하지만이 방법은 번거롭고 우아하지 않으므로 전체 오류 시스템을 리팩터링하는 것을 고려하고 있습니다.

인터넷에 대한 내 질문은 과거에이 문제를 어떻게 다뤘습니까? 아직 우연히 발견하지 못했던 병렬 오류 코드를 처리하는 아름답고 표준적인 방법이 있습니까?

우리는 C 언어로 작업하고 있으므로 예외를 사용하거나 문제를 해결하기 위해 오류 클래스 계층 구조를 만들 수는 없습니다.

감사합니다, --Dan

아마도
+0

어떤 종류의 대답을 찾고 있는지 잘 모르겠지만 가능한 한 내부 오류 코드를 사용하고 가장 바깥 계층의 클라이언트 오류 코드로 변환 할 수 있습니다 (응답을 구성 할 때).). – arghbleargh

+0

문제를 설명하는 일부 코드는 질문을 더 시사하는 데 도움이됩니다 (의견을 묻는 질문은 일반적으로 권장하지 않음). – jxh

답변

1

나는 당신의 질문을 이해 아니지만, 오류 코드의 여러 세트를 다루는 나의 기술은 "마스터 오류 코드에 그들에게 다른 범위를 지정하는 것입니다 . " 따라서 프로토콜 오류가 0-999 범위에있는 경우 내부 오류는 1000-1999가 될 수 있습니다. 함수 또는 매크로를 작성하여 오류 코드가있는 범위를 테스트하고 오류 코드를 원래의 체계 (아마도 0 기반)에서 마스터 오류 코드 할당 범위로 변환하는 산술 연산을 수행 할 수 있습니다. 다시.

오류 코드 시스템 중 하나가 작은 범위가 아닌 전체 32 비트 숫자를 사용하는 경우에도 마스터 오류 코드에 64 비트 정수를 사용하여이를 해결할 수 있습니다.

관련 문제