delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/1998/03/25/09:54:56

Message-Id: <199803251406.QAA57422@ieva06.lanet.lv>
From: "Andris Pavenis" <pavenis AT laima DOT acad DOT latnet DOT lv>
To: "Salvador Eduardo Tropea (SET)" <salvador AT inti DOT gov DOT ar>,
Vik Heyndrickx <Vik DOT Heyndrickx AT rug DOT ac DOT be>
Date: Wed, 25 Mar 1998 16:03:51 +0000
MIME-Version: 1.0
Subject: Re: NULL redefined! :(
CC: Peter Palotas <blizzar AT hem1 DOT passagen DOT se>, djgpp AT delorie DOT com,
djgpp-workers AT delorie DOT com
In-reply-to: <3518F995.6AEA@rug.ac.be>

> Date:          Wed, 25 Mar 1998 13:33:25 +0100
> From:          Vik Heyndrickx <Vik DOT Heyndrickx AT rug DOT ac DOT be>
> Subject:       Re: NULL redefined! :(

> Salvador Eduardo Tropea (SET) wrote:
> > But perhaps we must investigate if the __null have some advantage and:
> > 
> > 1) Define NULL conditionally (no redefinition)
> > 2) If not defined:
> > a) Test the gcc version, if 2.8.0 define with __null
> > b) if prior define with 0.
> 
> Conditional redefinition is dangerous since this way NULL might get two
> values that do not compare equal, even when compiled with the same
> compiler version.
> An unconditional #define is best (i.e. preceded with #undef) as it only
> disadvantages programs which are at fault.
> 
> Checking whether gcc's version is 2.8.0, won't help a bit:
> for instance the libc library can have been defined using gcc-2.7.2.1
> and hence NULL would be 0. A program compiled with 2.8.0 would then
> define NULL as __null. Like DJ mentionned, a library function like fopen
> can return NULL (=0) and it must be possible that a program compares it
> with NULL (=__null).
> 

I suggest to copy definition of NULL to .h files that conflicts
with ones from gcc 2.8.0 (%DJDIR%/lang/cxx/libio.h vai
%DJDIR%/lang/cxx/streambuf.h)

-------------------------------------------------------
#ifndef NULL
# if defined __GNUG__ && \
    (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
#  define NULL (__null)
# else
#  if !defined(__cplusplus)
#   define NULL ((void*)0)
#  else
#   define NULL (0)
#  endif
# endif
#endif
-------------------------------------------------------

I did so and don't have any problems yet. 

Andris Pavenis

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019