Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Aug 1997 03:22:28 -0400 (EDT)
From:      Bill Paul <wpaul@skynet.ctr.columbia.edu>
To:        chat@freebsd.org
Subject:   variable sized arrays and gcc
Message-ID:  <199708100722.DAA03236@skynet.ctr.columbia.edu>

next in thread | raw e-mail | index | archive | help
This technically isn't a problem with FreeBSD so I think it's best to
post about it here. Earlier tonight I was looking through a snapshot
of some of the Linux NIS+ client code when I noticed something that
just struck me as really strange. Basically, there was code like the
following:

int some_random_function(str)
	char			*str;
{
	char			buf[strlen(str) + 10];

	/* do some junk */

	return(0);
}

The problem here is that the array 'buf' is being declared with
a variable size. My mommy always told me that you couldn't do that:
buf[10] is okay, buf[strlen(foo) + 10] is not. At first I thought I
was losing my marbles, but it that seems gcc will compile this code.
No other compiler I tried would though (the SunOS 4.1.x unbundled ANSI C
compiler, Solaris 2.5.1 unbundled C compiler, HP-UX 10.20 ANSI C
compiler, SGI IRIX C compiler and the IBM AIX 4.1.x C compiler all
complained about the variable sized array and aborted compilation).
Gcc will not complain about this unless you use -ansi -pedantic:
even then you get a warning, but it compiles the code anyway.

Okay, maybe I haven't been paying attention, but this is the first
time I've ever noticed that gcc would let you do this. Personally,
I think it's damn strange, especially since _no_ other C compiler I
can find behaves the same way. (Well, no other UNIX C compiler; I don't
have an M$ C compiler or Borland or Watcom C compiler handy so I
don't know what those do. Elvis only knows what horrors M$ Visual C++
lets you perpetrate.) If it's a feature, I don't think it's a 
particularly good one since it encourages the use of non-ANSI (and 
apparently non-portable) code. If it's a bug, it's got to be the most 
carefully engineered bug of all time. :)

Is this a side-effect of GNU C and GNU C++ being joined together at
the hip, or did I just miss a memo somewhere?

-Bill

-- 
=============================================================================
-Bill Paul            (212) 854-6020 | System Manager, Master of Unix-Fu
Work:         wpaul@ctr.columbia.edu | Center for Telecommunications Research
Home:  wpaul@skynet.ctr.columbia.edu | Columbia University, New York City
=============================================================================
 "It is not I who am crazy; it is I who am mad!" - Ren Hoek, "Space Madness"
=============================================================================



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199708100722.DAA03236>