Repository navigation
코드상에서 Error 처리 방법 및 기타 컨벤션 #32
Description
Activity
- added10 minute task10분안에 끝낼 수 있는 간단한 업무10분안에 끝낼 수 있는 간단한 업무help wantedExtra attention is neededExtra attention is needed
on Feb 25, 2021 try catch 를 사용하는게 더 c++ 에 맞을 것 같은데,
전 메세지함수만 간단하게 만들어 사용하는거에 더 익숙하긴 합니다.그리고 bool 함수를 조건문에서 사용하는 경우에 따른 표기도 통일하면 좋을 것 같아요.
true 조건의 경우if (ft::isprint(c))false 조건의 경우
if (ft::isprint(c) == false)
Reacted by hochan Lee저는 보통 int형으로 반환하여
#include <cstdlib>에 있는EXIT_SUCCESS, EXIT_FAILURE를 사용해서 표현해왔습니다.- true 조건의 경우
if (ft::isprint(c) == EXIT_SUCCESS)
- false 조건의 경우
if (ft::isprint(c) == EXIT_FAILURE)
생각해보니 c에는 bool이없어서 이렇게 코딩한것같아요.
저는 다 좋은것 같아요! 우선 if문 조건 부분은 정해주시면 select 코딩할때 맞춰서 코딩하겠습니다!
네 저도 c에서는
EXIT_SUCCESS,EXIT_FAILURE를 이용했었는데 bool함수엔 적용이 안되니..false 조건의 경우는 가독성을 위해 아래처럼 false를 직접 표기하고
if (ft::isprint(c) == false)
true 조건의 경우에는 두 방법 중 하나를 선택하면 좋을 것 같아요. 전 둘 중엔 1번을 선호하긴 하는데 호리님은 어떠세요?
1. if (ft::isprint(c)) 2. if (ft::isprint(c) == true)
Reacted by hochan Lee저도 1번이 더 괜찮은것 같아요! 리턴형이 bool이니까 가독성고려해도 true 안써도 괜찮을것 같습니다!
Reacted by Junho Won후보군 4개를 만들어 보았습니다. 선택해주세요..!
- 1
따로 로직안에 메세지를 넣는다.
bool Server::setServerSocket() { if ((this->m_server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket error"); return (false); } if (bind( this->m_server_socket, (struct sockaddr *)&this->m_server_addr, sizeof(this->m_server_addr) ) == -1) { perror("bind error"); return (false); } if (listen(this->m_server_socket, 5) == -1) { perror("listen error"); return (false); } return (true); }
- 2
함수 밖 범위에서 메세지 로직을 갖으며 미리 정의된 enum이나 define을 이용한다.
# define SUCCESS_RETURN 0 # define SOCKET_ERROR 1 # define BIND_ERROR 2 # define LISTEN_ERROR 3 int Server::setServerSocket() { if ((this->m_server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) return (SOCKET_ERROR); if (bind( this->m_server_socket, (struct sockaddr *)&this->m_server_addr, sizeof(this->m_server_addr) ) == -1) return (BIND_ERROR); if (listen(this->m_server_socket, 5) == -1) return (LISTEN_ERROR); return (SUCCESS_RETURN); }
- 3
한 메소드 안에는 무조건 한 에러
bool Server::setServerSocket() { if ( ((this->m_server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) && (bind( this->m_server_socket, (struct sockaddr *)&this->m_server_addr, sizeof(this->m_server_addr) ) == -1) && (listen(this->m_server_socket, 5) == -1) ) return (true); return (false); }
- 4
throw 이용
void Server::setServerSocket() { if ((this->m_server_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) throw "socket error"; if (bind( this->m_server_socket, (struct sockaddr *)&this->m_server_addr, sizeof(this->m_server_addr) ) == -1) throw "bind error" if (listen(this->m_server_socket, 5) == -1) throw "listen error"; }
- 1
jwon
error handling
- 1
- 2
- 3
- 4
method안 member 변수무조건 this 사용
- O
- X
yechoi
error handling
- 1
- 2
- 3
- 4
method안 member 변수무조건 this 사용
- O
- X
holee
error handling
- 1
- 2
- 3
- 4
method안 member 변수무조건 this 사용
- O
- X
주된 처리를 1,2 번으로 하되, 4번 방식도 때때로 필요할 것 같아요. 클래스 상에서 자주 발생하거나 중요한 오류는 exception 클래스를 따로 만들어서, try-catch 로 처리하면 좋을 것 같습니다.
Reacted by hochan Lee그러면 1번으로 해요! 2번같은 경우에는 따로 헤더를 만들어서 관리해줘야하는 부분이기때문에 1번하고 혼용하는것보다는 단독적으로 쓰는게 좋다고 생각합니다!
메세지 함수는 나중에 유틸에서 정해서 만들고 메세지와 함께 리턴하는 방식으로 코딩하겠습니다! 감사합니당
(+) true 하고 false 반환중에 어떤것을 에러시 반환으로 할까요?
우선은 false로 return 했습니다.Reacted by Junho Won and Yeji Choi오오 저희 뭔가 수정해야될 점이 있나요?
- removed10 minute task10분안에 끝낼 수 있는 간단한 업무10분안에 끝낼 수 있는 간단한 업무help wantedExtra attention is neededExtra attention is needed
on Apr 8, 2021 오오 저희 뭔가 수정해야될 점이 있나요?
아뇨 코드 작성하는데 계속 참고하려고 다시 오픈했어요..ㅎㅎ
Reacted by hochan Lee
에러 처리 방법을 일관되게 하면 좋을것 같아서 이슈 달았습니다.
위 코드는 함수 반환값으로 한번에 message 함수를 통해 처리하는 방식입니다.
평소에는 어떻게 에러를 처리하시나요? (Class 나 구조체 안에 맴버변수로 관리.. try catch exception.. 등등)
또다른 하나는 class 의 메소드에서
this->m_server_socket다음과 같이 불러올 수 있지만
이렇게도 불러올 수 있는데
m_server_socket이 방식을 사용해도 되는지 아니면 모든 맴버 변수에 대해서 무조건 this를 붙일 것인지 정해주세요! 어떻게 하면 좋을까요?