Archived

This topic is now archived and is closed to further replies.

the difrence betwen true and TRUE

This topic is 5581 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

As the tile says I would want to know what''s the difrence betwen "true" and "TRUE" in C++ ( and offcourse "false" and "FALSE" are analog I think ). I use VC++ 6.0 Well I''ve noticed that true is an int var and TRUE is a bool var but beside that is there any real difrence ? Thanks DariusKing

Share this post


Link to post
Share on other sites
true is a bool constant, built into the C++ language.

TRUE is a #defined int constant used by windows APIs, with a value of 1

While it is true that all non-zero integral values evaluate to the boolean true and that true can be converted to the integral value 1, the two are not equivalent (I had a code snippet showing that, but I can't remember it).

The use of true is preferable in any case. TRUE is a hack that hails back to C (which didn't have a bool type until the C99 Standard) and pre-standard C++. It has no place in modern code... except maybe for backward compatibility with legacy APIs.

Here's an example:

  
template<class T> void Foo( T f )
{
if( f == (T)42 ) cout << "Equal" << endl;
}


If you pass true, it will print "Equal", but not if you pass TRUE. In the first case, 42 is converted into a bool and thus is evaluated as true, while in the second case, it stays an int and, well, 1 != 42.

There are other tricks, playing on the fact that it is the bool that gets converted into an int when checking whether they are equal, and other mixed-type comparisons.

The sizes are also not guaranteed to be the same: sizeof( true ) may be different from sizeof( TRUE ).

Documents [ GDNet | MSDN | STL | OpenGL | Formats | RTFM | Asking Smart Questions ]
C++ Stuff [ MinGW | Loki | SDL | Boost. | STLport | FLTK | ACCU Recommended Books ]


[edited by - Fruny on August 31, 2002 3:19:41 PM]

Share this post


Link to post
Share on other sites
I usualy use true too but today I was coding a litle MFC application and I got a worning when I tryed to compile this piece of code :

// bla bla... other things

if(m_bMesaj == true )
{
// other stuff here
}

the worning was :
"warning C4805: ''=='' : unsafe mix of type ''int'' and type ''const bool'' in operation "

and then I replaced true with TRUE and the code compilded without any wornings.....
So that''s way I''ve posted here....

DariusKing

Share this post


Link to post
Share on other sites