Were GNU C extensions proposed for the standard?

Michael Meissner meissner at curley.osf.org
Tue Jan 23 02:36:57 AEST 1990


I will try to highlight which things acutally got proposed, and why it
might have been rejected.

In article <153 at dy4.UUCP> paul at dy4.UUCP (Paul Burry) writes:
| 
| 	While we're on the subject of useful extensions to C
| (like "typeof"), I was wondering if any of the other GNU C
| extensions were proposed as new features in ANSI C.
| 
| 	Some of GNU C's more useful extensions (IMHO) are:
| 
| o	the addition of the "typeof" keyword

	It was proposed, and rejected on the grounds no new features
	and limited utility.

| o	the addition of the "inline" keyword

	It was proposed, and rejected on the grounds of qualitity of
	implementation (ie, the compiler should be smart enough to
	figure out when to inline).

| o	the addition of the "alignof" keyword

	It was debated, but never proposed, since there was no meeting
	of the minds of the precise details of alignment.  It also
	came up, at a time when the committee was trying to not add
	new features.

| o	statements and declarations inside of expressions
| 	ie.
| 	    #define max(a,b)		\
| 		({			\
| 		    int _a = (a);	\
| 		    int _b = (b);	\
| 		    _a > _b ? _a : _b;	\
| 	        })
| 	(on a side note, why didn't ANSI C define a way to avoid
| 	shadowing external variables in a macro defining?)

	Never proposed.

| o	generalized lvalues 
| 	ie.
| 	    allowing expressions, compound expressions and casts as lvalues.

	Brought up and definitely rejected on the grounds that this
	was a bug in PCC (K&R-1 I believe also outlaws it), and it is
	incredibly non-portable, particularly on some machines (like
	the DG & PR1ME machines with different pointer formats).

| o	arrays of zero length

	The whole area of zero sized items was debated over two
	meetings, and eventually tabled for various reasons.

| o	arrays of variable length
| 	ie.
| 	    some_function(int n)
|             {
| 		char array[n];
| 		    :
| 	    }

	This was not proposed, but it looks like the numerical
	extension committee will go with it, and it will be a likely
	canidate for the next standard.

| o	non-constant initializers allowed for aggregates
| 	ie.
| 	    foo(float f, float g)
| 	    {
| 		float array[2] = { f-g, f+g };
| 	    	    :
| 	    }

	This was proposed when the committee decided to allow
	initializing automatic aggregates.  There were some problems
	pointed out in how to nail down all of the details, also many
	people thought it was too complex to satisfy the need
	(particularly those who would have to implement it).

| o	application of volatile and const to functions
| 	ie.
| 	    volatile functions do not return (like exit(), abort()).
| 	    const functions produce no side effects (like sin()).

	These were not proposed.  I think that towards the end the
	committee became more gunshy of overloading keywords (void
	having three different meanings).

| There are a number of other extensions, but I think that these are the
| most useful.

Scanning the GCC texinfo file, the other extensions are:

  o	Pointer arithmetic on pointers to void and/or functions

	This may have been brought up, and shot down because this
	is non-portable, and the semantics of doing it are questable.

  o	Constructors (creating runtime aggregate expressions)

	I remember some discussion, but I think it was dropped due to
	inadequate support.

  o	Dollar signs in identifiers

	This was rejected, because some systems cannot support $ in
	identifiers, and $ is only of the national characters in ISO
	646, and would need a trigraph to use (yech).

  o	Extended asm, asm labels, & global register variables

	These were never considered, since the committee did not bless
	the 'asm' (or 'fortran' for that matter) extension.

| If these extensions were proposed, what was the justification for denying
| their inclusion in the standard?
| 
| -- 
| =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
| Paul Burry 			PHONE:  (613)-596-9911
| UUCP: ...!cognos!dy4!paul	POST:	Dy4 Systems Inc., 21 Fitzgerald Road,
| or    ...!cognos!dy4!seu13!paul	Nepean, Ontario, Canada K2H 9J4


Michael Meissner	email: meissner at osf.org		phone: 617-621-8861
Open Software Foundation, 11 Cambridge Center, Cambridge, MA

Catproof is an oxymoron, Childproof is nearly so



More information about the Comp.lang.c mailing list