Sender: nate AT cartsys DOT com Message-ID: <36FAB650.FE0FB596@cartsys.com> Date: Thu, 25 Mar 1999 14:18:56 -0800 From: Nate Eldredge X-Mailer: Mozilla 4.08 [en] (X11; I; Linux 2.2.3 i586) MIME-Version: 1.0 To: djgpp AT delorie DOT com Subject: Re: Preprocessor hates sizeof References: <001201b9fa34$1cc33d80$b7f9c6c3 AT johans-dator> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: djgpp AT delorie DOT com Johan Henriksson wrote: > > from Johan Henriksson, Sweden HTTP://come.to/jhewok | > Primary mail: johan DOT he AT telia DOT com #UIN 12035895 > Second: jhe75 AT hotmail DOT com Third: johan_he AT yahoo DOT com > Leadprogrammer and FX-specialist at Real software > http://come.to/real_software > ************************************************************************* > -----Original Message----- > From: Hans-Bernhard Broeker > Newsgroups: comp.os.msdos.djgpp > To: djgpp AT delorie DOT com > Date: Wednesday, March 24, 1999 6:48 PM > Subject: Re: Preprocessor hates sizeof > > >In article > you wrote: > >> Hi > > > >> I wonder why the following line does not compile and how to make it work: > > > >> #if sizeof(long int)==sizeof(int) > > How do you think that would work!? Of course, a long int != int. Or? No. All the standard guarantees is that sizeof(long int) >= sizeof(int). They can be equivalent, and in DJGPP, are. The reason it doesn't work is that `sizeof' is parsed by the compiler pass, not the preprocessor. (The preprocessor by tradition is target-independent.) So the preprocessor does not know what sizeof(type) equals. You will have to do the test at run time (actually, a good compiler like GCC should optimize away the test and remove the dead code), or else run an auxilary program which does the test and use its result in a #define somewhere. > > > >> (Borland likes it) > > > >Preprocessors are *not* allowed to like that line. Borland is > >violating the definition of C if it accepts that line and does what > >you think it should. > > > >So Borland is in error, here, not DJGPP. Well... one could call it an extension. Heck, `inline' is invalid C, but GCC allows it (though, I admit, not with -ansi). -- Nate Eldredge nate AT cartsys DOT com