2월, 2011의 게시물 표시

warning C4800: 'BOOL' : 'true' 또는 'false'로 bool 값을 강제하고 있습니다(성능 경고)

지금 사용하는 엔진 내부에서 BOOL을 쓰고 있고 저는 왠만하면 bool을 쓰기 때문에 저런 경고가 나오더군요. 
또는 warning C4800: 'int' : 'true' 또는 'false'로 bool 값을 강제하고 있습니다(성능 경고) 등의 경고메세지를 뿜어덴다면 아래와 같이 해주면 됩니다. 해결책은 크게 2가지 인데요 삼항연산자를 활용하거나 전처리기로 처리하면 됩니다.

삼항연산자 x = ( y != 0 ) ? true : false;
전처리기 #define getBool( n ) ( ( n ) ! = 0 )
저는 왠만하면 전처리기를 안쓸려고 하기 때문에 삼항연산자로 처리하고 있습니다.
컴파일에러나 링크에러는 당연히 잡아야하는 것이고, 경고도 깔끔하게 잡고 가는게 좋겠죠.

warning C4482: 비표준 확장이 사용되었습니다. 정규화된 이름에 ... 열거형을 사용했습니다. 해결에 대한 고민

namespace Animation
{

struct eMotionLayer
{
enum
{
eUpper = 0,///< 상체
eLower,///< 하체
eMax
};
};

}
사실 예전부터 제목처럼 비표준 어쩌고 해서 enum을 struct로 묶어서 사용했었습니다. Animation::eMotionLayer::eUpper처럼 말이죠. 그럼 깔끔하게 warning가 안 떴거든요. 근데 요즘들어 왜 그냥 enum으로만 하면되지 타이핑을 더 해가면서 struct에 넣어서 해야만 warning이 없어지는거야? 다른 방법은 없을까? 하는 생각이 들었습니다.

namespace Animation {
enum eMotionLayer { eUpper = 0,///< 상체 eLower,///< 하체 eMax };
}

Animation::eMotionLayer::eUpper 처럼 사용하면 제목처럼 warning가 발생하는데요 Animation::eUpper처럼 사용하고 이렇게 간단히 하나의 namespace에 enum만 놓고 쓸려고 생각은 해봤습니다. 하지만 이 eMotionLayer 말고 다른 enum들이 생길 시 다 똑같이 Animation:: 으로 사용을 해야한다는 측면에서 맘에 안 들더라구요.

namespace Animation
{

namespace eMotionLayer
{
enum eMotionLayer
{
eUpper = 0,///< 상체
eLower,///< 하체
eMax
};
}

}
Animation::eMotionLayer::eUpper 사용은 이렇게 하면 되지만 그렇다고 위처럼 네임스페이스를 두번 묶어하는게 그닥 이뻐보이지는 않고요... 
뭘 어떻게 해야 이쁘고 깔끔하니 될까 고민중입니다. 일단 2번째 방법으로 간단히 해가볼려고합니다.

ACE기반이면서 ACE보다 사용하기 쉬운 HalfNetwork

이미지
HalfNetwork는 한국 개발자이신 자바워크라는 분이 ACE를 가지고 만드신 오픈소스 C++ 네트워크 라이브러리입니다.

뭔가 덩치크고 복잡한? ACE를 Half-Sync Half-Async 패턴을 구현해 개발자들이 쉽게 사용할 수 있도록 만드셨다고 하네요.

간단하게 그림처럼 되어있다고 하네요. HalfNetwork 라이브러리는 ACE의 API를 사용해서 구현이 되어있고 사용하는 어플리케이션에서는 큐에 쌓인 메세지 블럭들을 가져와 처리만 하면 되는 구조인듯 합니다.

Proactor(IOCP)와 Reactor(WaitForMultipleObjects) 두가지 네트워크 모델을 가지고 있고 둘다 Acceptor과 Connector을 붙일 수 있다고하네요.


TCP 사용Proactor(IOCP)Reactor(WaitForMultipleObjects)패킷 생성기타이머ADO 방식 DB 라XML파서메모리풀간단한 로깅 시스템Windows, Linux 지원64비트 지원BSD 라이센스

ACE의 올바른 사용법을 배우고 싶거나, 네트워크 프로그램을 좀 더 쉽게 개발하실 때 사용하면 되겠네요. 대한민국에도 이런 멋진 오픈소스가 있다는게 정말 자랑스럽네요!!

가장 최신 버전 0.6.5가 2010년 8월에 릴리즈가 되었네요. 아래 링크에서 다운로드 가능합니다.

관련자료
자바워크님 게임 개발자 네트워크 미니 컨퍼런스 발표자료


관련링크
HalfNetwork 소프포지 다운로드
HalfNetwork 구글코드
HalfNetwork 개발자 자바워크님 블로그
HalfNetwork 스프링 노트
HalfNetwork 구글 그룹스
또다른 HalfNetwork Committers jacking님 블로그