From: "Marp" Newsgroups: comp.os.msdos.djgpp Subject: Re: BOOL as char/int Date: Tue, 13 Apr 1999 23:48:28 -0400 Organization: Netcom Lines: 22 Message-ID: <7f136b$351@dfw-ixnews6.ix.netcom.com> References: <7ev4na$49a$1 AT lola DOT ctv DOT es> NNTP-Posting-Host: prn-nj1-25.ix.netcom.com X-NETCOM-Date: Tue Apr 13 10:48:27 PM CDT 1999 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2014.211 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2014.211 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Rafael García wrote in message news:7ev4na$49a$1 AT lola DOT ctv DOT es... > It fails with BOOL as char, but works as int > Can someone explain this reasonably? > It works well with Borland > I have been using this typedef for years and it seems standard, robust, > good, pretty, simple, near-machine, fast, compact... > It seems gods of chaos are conquering the world of computing After doing some experimentation, I think I have found the answer. When the function isupper returns "true" it is returning the number 512. The ansi spec says that isupper may return any non-zero int value when it returns "true" and zero when "false." The problem here is that char datatype is 8 bits and can only hold values between 0 and 255 (unsigned). If you go over 255, it rolls over to zero, for example 255 + 1 = 0 as far as char is concerned, but is 256 with int. Since 512 is twice as much as 256, char rolls over to zero twice and BOOL find hold zero. So when you test the value with BOOL as type char, you get zero, and with type int, you get 512, or "true". Hope this helps you understand better.