[OpenBIOS] ANSI

John R. Hogerhuis jhogerhuis at yahoo.com
Sun Jun 23 23:01:15 CEST 2002


OFF TOPIC !

Niggling point from a C programmer with a few gray
hairs in his beard:

#if 0
#endif

is in fact the One True Way to comment out a block of
code in ANSI C, since you can't use //
and /* */ doesn't nest (i.e. you want to comment out a
block of code that has a smaller block commented out
already.)

Yeah it's harder to see, but it always works and never
leaves you scratching your head wondering why
commenting out a code doesn't seem to have the exact
intended effect.

On the other side, I don't like seeing these things
left in the code very long either. If I have #if 0's
in my code, it usually means I haven't decided if the
New Way is the Final Way, and it's usually better just
to make the decision and let the source code control
system keep the history.

-- John.

ON TOPIC !

--- Segher Boessenkool <segher at chello.nl> wrote:
> > There was some discussion on this list on probing
> compiler
> > features before actually using them instead of
> making vague assumptions
> > on what version supports which feature.
> 
> I still prefer just requiring gcc-3 (although it
> currently works "fine"
> with 2.95 as well) (except on some 64-bit targets).
> 
> > Instead of using a vast amount of
> autoconf/automake magic, I wrote a
> > small perl script that calls the compiler with
> simple code fragments
> > and analyzes these afterwards using nm.
> 
> Good :)  The autoevil suite is, well, evil ;)
> 
> > This way it is also
> > usable when cross compiling. Basically the patch
> removes types.h
> > as it will be autogenerated plus the already known
> ANSI fixes (mostly
> > applying a regexp to change comment style)
> 
> Please keep types.h intact, and have it include an
> auto-types.h or
> something like that.  Much easier if you want to
> bypass the automatic
> stuff for whatever reason.
> 
> > The configuration script conf.pl also checks for
> available data types
> > and chooses the needed ones to set up the internal
> structures.
> > gcc's TI mode is probed and, if available and
> needed, it is used.
> > 
> > Any comments? ;)
> 
> Walkthrough :)  :
> 
> 
> -CFLAGS = -Wall -W -std=gnu9x -g -O2 # -pg
> +CFLAGS  = -Wall -std=gnu9x -g -O2 # -pg
> 
> Why remove -W ?  It's soooo useful :)
> 
> +CC     = gcc
> 
> I removed this for a reason ;)   Just   CC=gcc make 
>  if you need it...
> 
> +NM     = nm -t bsd
> 
> Not all nm's are GNU nm.  Different nm's outputs are
> similar enough to
> be parseable with a simple regexp.
> 
> -paflof.o paflof.s: paflof.c prim.code prep.h
> dict.xt
> +paflof.o paflof.s: paflof.c prim.code prep.h
> types.h dict.xt
> 
> Ah yes, I forgot.  Thanks.
> 
> +$CC="gcc -std=gnu9x";
> +$NM="nm";
> 
> Better just use sh's already-set variables for this.
> 
> +sub check_size
> +{
> +       my $what=shift;
> +       my $attr=shift;
> +       my $include=shift;
> +       
> +       # create .test.c file
> +       open(F, ">.test.c");
> 
> Don't hide temporary files -- if you feel they
> clobber the source dir,
> create them somewhere else (like, /tmp).
> 
> +# Check for restrict keyword.
> +my $answer="no";
> +print("\nChecking whether we can use the restrict
> keyword (C99)... ");
> +print(I "\n#define __RESTRICT__ ");
> 
> The C compiler already defines __STDC_VERSION__ to
> 199901L or greater if
> C99 features are supported.
> 
> -//#define DEBUG_STACKS
> -
> 
> Don't remove this, please ;)  #undef it, if you
> want, but keep all compile-time
> flags at the top op file :)
> 
>  #include <stdio.h>
>  #include <stdlib.h>
> +#define __USE_XOPEN_EXTENDED
>  #include <unistd.h>
> -#include <string.h>
> +#define __USE_MISC
>  #include <sys/mman.h>
> +#include <string.h>
>  #include <termios.h>
> +#define __USE_POSIX
> +#define __USE_POSIX199309
>  #include <signal.h>
>  #include <fcntl.h>
> 
> This isn't exactly making stuff more portable, now
> is it?
> 
>  struct interpreter {
> -       cell *restrict data_stack;
> -       cell *restrict return_stack;
> -       cell *restrict dictionary;
> -       char *restrict tib;
> -       char *restrict pockets;
> +       cell * __RESTRICT__ data_stack;
> +       cell * __RESTRICT__ return_stack;
> +       cell * __RESTRICT__ dictionary;
> +       char * __RESTRICT__ tib;
> +       char * __RESTRICT__ pockets;
>         void *here;
>  };
> 
> It would have been simpler had you done
> #define restrict
> if restrict isn't supported...
> 
> +#if 0
> +       free(i->data_stack);
> +       free(i->return_stack);
> +       free(i->dictionary);
> +#endif
> 
> #if 0  for commenting out code is evil, imho.
> 
> 
> Well, I'll get to it.
> 
> 
> Segher
> 
> -
> To unsubscribe: send mail to
> majordomo at freiburg.linux.de
> with 'unsubscribe openbios' in the body of the
> message
> http://www.freiburg.linux.de/OpenBIOS/ - free your
> system..
> 


__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com
-
To unsubscribe: send mail to majordomo at freiburg.linux.de
with 'unsubscribe openbios' in the body of the message
http://www.freiburg.linux.de/OpenBIOS/ - free your system..



More information about the openbios mailing list