warning C4800

#define LIFESPAN  0x000002

bool hasLifespan( int attrBitMask ) { return ( attrBitMask & LIFESPAN ); }

위와 같은 code가 있다고 했을 때,
다음과 같은 경고(warning)이 발생할 수 있다.

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

또는

warning C4800: ‘int’ : forcing value to bool ‘true’ or ‘false’ (performance warning)

다음과 같이 형변환(type casting)으로는 경고(warning)을 없앨 수 없다.

bool hasLifespan( int attrBitMask ) { return (bool)( attrBitMask & LIFESPAN ); }

이 경고는 code의 가독성을 높이기 위해 int형 변수를 bool형으로 강제로 변환했을 때 발생하는 것으로서
반환되는 값이 0이나 1이 아닐 경우을 엄밀하게 방지하게 위해서 존재하는 경고이다.

다음과 같은 방법으로 해결한다.

bool hasLifespan( int attrBitMask ) { return ( attrBitMask & LIFESPAN ) ? (true) : (false); }

Add a Comment