Programming Tips - How can I fix: warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)

Date: 2010jan24 Product: VC++ Q. How can I fix: warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning) A. The Visual Studio compiler makes a big deal of int to bool conversions. For example, if you do:
bool bPunct = ispunct(c); // causes warning
You'll get the warning. So how about this attempt at a fix:
bool bPunct = (bool) ispunct(c); // still causes warning
No luck. The help file says its "by design" for a cast not to hide the warning. Here are a number of ways to get around the warning. Use a macro to do the conversion:
#define MKBOOL(_a) ((_a) != 0) bool bPunct = MKBOOL(ispunct(c)); // No warning
Use BOOL (which is an int in Windows):
BOOL bPunct = ispunct(c); // No warning
Disable the warning (perhaps in your stdafx.h file):
#pragma warning(disable: 4800) // disables the warning