여러 SDK가 융합 된 특수 장치를 제어하는 C++ 코드를 작성하고 있습니다. 내 코드 모양은 다음과 같습니다절차 적 하드웨어 프로그래밍을위한 오류 처리 기술
#define sdk1SafeCall(err) __sdk1SafeCall(err,__FILE__,__LINE__)
int errorcode = 0;
sdk1SafeCall(sdk1_InitializeDevice());
errorcode=sdk2_InitializeDevice();
errorcode=sdk3_InitializeDevice();
if (some_parameter)
{
errorcode=sdk2_readDevice(true);
}
else
{
errorcode=sdk3_writeDevice();
}
label again: errorcode=sdk1_readDevice();
if (error) goto again;
errorcode=close_everything();
사용 매개 변수는 제어 흐름을 재정렬합니다. 내 현재 방법은 cudaSafeCall과 같은 것을 사용하여 오류 코드를 감싸고 종료합니다. 어떻게 해야할지 모르겠지만 이러한 오류에 대한 자세한 설명이나 복구 방법 (예 : goto 예제)을 저장할 위치입니다. 결국 코드는 정말 지저분 해 보입니다.
편집
가끔 래퍼와 오류를 처리 않습니다.
어쨌든 errorcode의 값을 실제로 읽지는 않으므로 코드를 작성하고 똑같은 코드 구현을 구현할 수 있습니다. –
@PeteFordham 나는 그들과 어떻게 해야할지 모른다. 내 실제 구현에서는'sdk1SafeCall (sdk1_readData())'와 같이 CUDA와 같이 숫자, __FILE__ 및 __LINE__을 인쇄합니다. – Mikhail