C++ 코드에서 사용해야하는 오류 번호에 대한 규약이 있습니까?C++ 오류 번호 할당 - 허용되는 표준이 있습니까?
1부터 시작합니까? 아니면 높은 번호를 고르고 거기에서 가야합니까?
예
그래서 여기있다, 요청 된 : 어떤 규칙이 없습니다#define ERR_EVERYTHING_IS_WRONG 42
try
{
throw ERR_EVERYTHING_IS_WRONG;
}
catch(int err)
{
//
}
C++ 코드에서 사용해야하는 오류 번호에 대한 규약이 있습니까?C++ 오류 번호 할당 - 허용되는 표준이 있습니까?
1부터 시작합니까? 아니면 높은 번호를 고르고 거기에서 가야합니까?
예
그래서 여기있다, 요청 된 : 어떤 규칙이 없습니다#define ERR_EVERYTHING_IS_WRONG 42
try
{
throw ERR_EVERYTHING_IS_WRONG;
}
catch(int err)
{
//
}
하나가있는 경우-의 중첩을 피하기 위해 노력보다 더 많은 읽을 수 있습니다 C++ 코드의 다른 오류 규칙에 대한 표준을 따릅니다. 열거 형
예 :
enum FILE_ERROR{
FILE_NOT_FOUND,
FILE_NO_ACCESS,
FILE_BUSY
};
코드에서 FILE_NOT_FOUND는 오류 번호 0으로 사용할 수 있습니다. 따라서 어떤 오류 유형이 무엇을 의미하는지 쉽게 알 수 있습니다.
아니요, FileNotFound는 True 또는 False가 아닌 다른 부울입니다. C++에서 enum 클래스를 사용하는 – CashCow
은 enum 유형을 int로 변환하기 위해 int에 static_cast를 사용해야합니다. –
enum 요소 유형은 정수 const입니다. 따라서 변환하거나 다시 캐스팅 할 필요가 없습니다. –
, 당신은 당신이 아니라 당신이 할당 할 수있는 논리적 인 방법을 유지으로 원하는대로 할 수 있습니다. 당신이 나쁜 사용자 입력을 3
을 선택한 경우에만 해당 오류를 위해 그것을 유지하거나 당신이 정말로 곧
을 잃은거야 경우
는 ++은 C에 대한 오류 코드, 가능성으로 성공으로 1과 0을하는 것이 일반적이다 (strcmp, etc ...)
때때로 이것은 특히 C 코드와 상호 작용할 때 혼란 스러울 수 있습니다. 그러나 이것은 많은 가독성을 돕습니다.
if(cplusplus_function()) {...}
는
if(!c_function()){ ... }
당신이 C++에서 활용에 대한 예외를 가지고도 기억하고 가장 좋은 방법의
try-catch의 경우 숫자를 사용하지 마십시오! 표준 예외 클래스에서 파생 된 클래스를 사용하십시오. 예 :
#include <stdexcept>
class my_error : public std::runtime_error {
public:
explicit my_error(const std::string& what_arg) : std::runtime_error(what_arg) {};
};
사용 (Coliru) :
#include <iostream>
int main() {
try {
throw my_error("You can even pass a string here!");
} catch (const my_error& e) {
std::cerr << e.what();
}
}
또는 간단 :
class my_error {
};
int main() {
try {
throw my_error();
} catch (const my_error& e) {
//TODO handle my_error
}
}
: 표준 라이브러리없이
std::runtime_error
#include <stdexcept>
#include <iostream>
int main() {
try {
throw std::runtime_error("Error happened");
} catch (const std::runtime_error& e) {
std::cerr << e.what();
}
}
사용
표준 라이브러리를 구현하지 않습니다. (나는 당신이 그것이 내 실수이거나 시간 낭비라고 생각할 것이다. 그러나 나는 나의 코드와 관련된 몇 가지 중요한 이유가 없다고 확신한다.) 그래도 고마워. – Beakie
* 표준 라이브러리를 구현하지 않습니다. * 그 의미는 무엇입니까? 표준 라이브러리를 사용하고 있지 않습니까? 어쨌든'std :: runtime_error'를 상속받지 않고 커스텀 예외 클래스를 생성 할 수 있습니다. – Csq
표준을 사용하지 않습니다. 아니 전혀 포함! 미친, 알아요 :) 나는 게시 할 때마다 들었습니다. -/ – Beakie
어떤 종류의 오류 번호가 표시됩니까? 예를 들어 질문을 명확히하는 것이 좋습니다. – Csq
42를 사용하지 마십시오. 결코 오류가 아닙니다. – CashCow
만약 당신의 질문을 올바르게 이해하고 있다면, C++에서 다소 받아 들여지는 표준이 있습니다. 예외를 사용하십시오. 그것이 그들이 원하는 것입니다. (하지만 질문에 대한 대답은 실제로 대답이 아니며, 실제로 오류가 아닌 것을 반환하는 것에 대해 실제로 묻고있을 수도 있습니다.) – hvd