HDTenEightyP/NetNews huggingface dataset:
From: "chris perkins" <chris.perkins@canrem.com>
Subject: problem in turbo c/c+
Reply-To: "chris perkins" <chris.perkins@canrem.com>
Organization: Canada Remote Systems
Distribution: comp
Date: 6 Oct 92 11:46:29 EST


In article <1992Sep29.141458.2352#fid.morgan.com> From: joec@fid.morgan.com (Joe Collins)
Subject: Problem in Turbo C/C++ with DOS.H

JC>Anyway, in the code I use:
JC>     #include <dos.h>
JC>and compile the code and get compile errors in dos.h (!).
JC>The error messages are:

JC>  VALUE OF TYPE VOID IS NOT ALLOWED

JC>  ) EXPECTED


JC>This appears for 2 lines in dos.h - here is one of the failing lines:

JC>unsigned _Cdecl _dos_write( int __fd,void far *__buf,unsigned __len,
JC>            unsigned __nread);

JC>For those who have the dos.h, its line 277 therein.

JC>WHAT IS WRONG? Should I speak to Borland about this or is there
JC>a compile option I need?

Take a look at your code before the #include, including (sic) your own
include files.  I had a similar problem once and it was something simple,
like a missing ";" or "}".  In particular check for missing ";" at
the end of struct definitions.

Regards,

Chris
---
  DeLuxe/386 1.25 #9629  Best wishes,         Chris Perkins
--
Canada Remote Systems  - Toronto, Ontario
World's Largest PCBOARD System - 416-629-7000/629-7044
From: tomc@siesoft.co.uk (Tom Crossland)
Newsgroups: comp.lang.c
Subject: Re: C-formattors (problems with very long lines)
Date: 29 Sep 92 17:30:40 GMT
Reply-To: tomc@siesoft.co.uk
Organization: Siemens Nixdorf Information Systems Ltd.

hermann@uran.informatik.uni-bonn.de (Hermann Stamm) writes:
:    - insert a '\n' after each ';' found

What about things like for(a=1; a<MAX; a*=2)...
would become

for(a=1;
a<MAX;
a*=2)...

It should still compile, but it's hardly "beautified"
--
___ _ __   "Beep beep blip beep bibble beebeeep blip bibble beep" - Altern8
  ((_))))...  Tom Crossland, Sysop of DarcWorld IES, [+44] [0]8675 77724.
         Hi! I am a .signature virus. Copy me into your .signature to join in!
Newsgroups: comp.lang.c
From: operator@julian.uwo.ca (Operator)
Subject: can != be used in compound if
Organization: University of Western Ontario, London
Date: Mon, 28 Sep 1992 19:46:31 GMT


can  -- not equal (!=) -- be used in a compound if statement????


for example:


rnum is a random number generated by random().
number_set[] is an array of 6 integers.


if (rnum != number_set[1] && rnum != number_set[2] && rnum != number_set[3])


is this if statement correct, if not, what is wrong with it????


your help is appreciated!!!

Thanks in advance!!!!
From: hartman@ulogic.UUCP (Richard M. Hartman)
Newsgroups: comp.lang.c
Subject: Re: Numerical recipes, var arg function passing - how to?
Date: 30 Sep 92 19:02:14 GMT
Organization: negligable

In article <1a8kbhINN1o0@network.ucsd.edu> jracine@weber.ucsd.edu (Jeff Racine) writes:
:Hi.
:
:I am trying to get a multidimensional minimization algorithm running
:using the algorithm powell() from Numerical recipes in C.
:
:The algorithm powell() accepts a function declared as (*func)(float *)
:(is this an ANSI declaration?). It expects a function of a vector of 
:parameters which it will minimize. I have a function which has two
:arguments, declared as
:
:float *my_func(float *parameters, float **data)
:
:and I want to pass this to the NR routine powell(). How is this to be
:done properly? I have tried a simple 
:
:#define func(parameters) my_func(parameters, data)
:
:and get the compiler error
:
:main.c(406) : Error: cannot implicitly convert
:from:<far *><float>
:to  :<far *><far C func(<far *><float>) returning><float>
:
:Any hints/solutions would be greatly appreciated.

You have to have a function that takes only one float * param.
Period.  #define is just shorthand, and the compiler gets the
same thing as if you typed it in from the beginning.  If you
make

	my_func2(float *params)
	{
		my_func(params, data);
	}

and pass my_func2 to the powell() routine that should make
everybody happy.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
And when you stop and think about it	|
(you won't believe it's true)		|	-Richard Hartman	
That all the love you've been giving	|	hartman@uLogic.COM
has all been meant for you.		|
From: michel@vedge.UUCP (Michel Trudeau)
Newsgroups: comp.lang.c
Subject: Re: unpredictable post-decrement behavior.
Date: 28 Sep 92 19:13:29 GMT
Organization: Visual Edge Software, St. Laurent, Quebec

herzog@ux5.lbl.gov (Hanan M. Herzog) writes:
: See this:
: 	         product *= (double)(4 * n * n) / ((4 * n * n++) - 1);
: 
: Some compilers had no problem with this line at all. However some
: hurled completely upon sight of the 'n++'. A few compilers required
: me to place the 'n++' on the next line in the while loop. So
: the code looked like:
: 
: 	         product *= (double)(4 * n * n) / ((4 * n * n) - 1);
: 		 n++;
: 
: Why did some compilers get and others not?
: 
   In 'C', unpredictable means undefined behavior.

	 Even if some of the compilers get it right now, they may get it
	 wrong in the next version or simply with a different optimization level
	 since an expression may be reorganized between two sequence points.

	 By putting the 'n++' in a seperate expression is the right and safe
	 way to go.


Regards,
Michel
From: wirzeniu@klaava.Helsinki.FI (Lars Wirzenius)
Newsgroups: comp.lang.c
Subject: Re: Copy of FAQ
Date: 29 Sep 92 16:29:24 GMT
Organization: University of Helsinki

kompels@ucbeh.san.uc.edu writes:
>I presume FAQ stands for frequently asked questions. Being a beginner I would
>like to have a copy of it myself--  how do I get one?

I answer in public because there seems to be so much trouble to find the
FAQ.

1.  The easy way is to wait a couple more days and a new copy will
    arrive to this very newsgroup.  It is posted monthly.

2.  If you can't wait, or didn't think to save a copy for yourself, you
    can check the news.answers newsgroup, which often keeps articles for
    longer periods than normal newsgroups.  This is a good idea anyway.
    In addition to reading the comp.lang.c FAQ (or whatever FAQ you were
    searching for), you should also read the articles describing
    netiquette, how to find and get FAQs by ftp, among others. 
    news.announce.newusers is another good group to read.

3.  If you're still not satisfied, and know how to ftp, go looking into
    pit-manager.mit.edu.  I'm not going to give better explanations on
    this: if you need them, you need them badly enough that you're
    better off reading the suitable document from news.answers.  [And
    anyway, step #2 should keep you busy for a few weeks. :-]

--
Lars.Wirzenius@helsinki.fi
Newsgroups: comp.lang.c
From: bjornmu@idt.unit.no (Bj|rn P. Munch)
Subject: Re: unpredictable post-decrement behavior.
Organization: Div. of CS & Telematics, Norwegian Institute of Technology
Date: Wed, 30 Sep 92 16:54:12 GMT

In article <316@ulogic.UUCP>, hartman@ulogic.UUCP (Richard M. Hartman) writes:
|> In article <28638@vedge.UUCP> michel@vedge.UUCP (Michel Trudeau) writes:
|> >herzog@ux5.lbl.gov (Hanan M. Herzog) writes:
|> >: See this:
|> >: 	         product *= (double)(4 * n * n) / ((4 * n * n++) - 1);
|> >: 
|> >: Some compilers had no problem with this line at all. However some
|> >: hurled completely upon sight of the 'n++'. A few compilers required
|> >: me to place the 'n++' on the next line in the while loop. So
|> >: the code looked like:
|> >: 
|> >: 	         product *= (double)(4 * n * n) / ((4 * n * n) - 1);
|> >: 		 n++;
|> >: 
|> >: Why did some compilers get and others not?
|> >: 
|> >   In 'C', unpredictable means undefined behavior.
|> >
|> 
|> The behavior for n++ is NOT undefined or unpredictible.

But is IS.  Sort of.  What is undefined is _when_ the actual update to
the variable n takes place, and also the order of evaluation of the
variuos terms in the expression.

In other words, it is not defined whether the *other* uses of the
variale n get the new or the old value.  You may get anywhere from 0
to 3 uses of the updated n.  I guess 0 would be most common, but don't
rely on it.

---
Bj|rn P. Munch               | Dept. of Comp. Science & Telematics,
Bjoern.P.Munch@idt.unit.no   | Norwegian Institute of Technology (NTH),
PhD Student                  | N-7034 Trondheim, Norway
Univeristy of Trondheim      | Fingerable addr:  bjornmu@multe.idt.unit.no
From: kherron@ms.uky.edu (Kenneth Herron)
Newsgroups: comp.lang.c
Subject: Re: Curses to write to stderr, possible?
Date: 2 Oct 92 12:38:59 GMT
Distribution: na
Organization: University Of Kentucky, Dept. of Math Sciences

hartman@ulogic.UUCP (Richard M. Hartman) writes:

>If you can isolate the curses stuff in subroutines you could
>always play games w/ the file pointers....

>	stdout = stderr;
>	....
>	stdout = old;

On our system this would roll over and die.  Here's what we have
in stdio.h:

#define	stdin	(&_iob[0])
#define	stdout	(&_iob[1])
#define	stderr	(&_iob[2])

I don't know what ANSI says on the matter.
-- 
Kenneth Herron                                   kherron@ms.uky.edu
University of Kentucky                              +1 606 257 2975
Department of Mathematics      I just thought of a neat disproof of
     Fermat's last theorem, but .signatures can only be four lines.
From: hartman@ulogic.UUCP (Richard M. Hartman)
Newsgroups: comp.lang.c
Subject: Re: problem with format of while, for if, and nested ifs
Date: 30 Sep 92 00:17:28 GMT
Organization: negligable

In article <1992Sep28.133936.25414@julian.uwo.ca> operator@julian.uwo.ca (Operator) writes:
>
>if I had the following code what would be the correct format??
>
> [ code example moved to end of msg ]
>             
>what would be the correct format for this???
>
>the problem I have is that it hangs and never leaves the first if statement.
>I would appreciate the help
>
>Thanks!!

Formatting has nothing to do w/ code hanging, it just makes it
easier (or harder) to read.  Unless, of course, you are talking
about something else when you say "format".

Now, let's see about syntax problems...

>while ( condition )
>   {
>   for ( condition )

//- problem: syntax for "for" is "for (statement; condition; statement)"
//		a simple "for (condition)" may have unpredictible results

>      {
>       if ( several conditions )

//- format: align "if" directly under brace, not additional space...
//	but this would not affect the code any...  Since the rest of the
//	sample is done "right" (note: the "right" indentation format IS
//	a "religious" issue...) I will presume this was a typo.

//- potential problem: depends upon how "several conditions" has
//	been written.....

>          {
>          if ( condition )
>             {
>             statement;
>             statement;
>             }
>          if ( condition )
>             {
>             statement;
>             statement;
>             }
>          if ( condition )
>             {
>             statement;
>             statement;
>             }
>          }

//- unless you have a statement here your claim is unfounded,
//	the brace above ends the "first if statement", so you have
//	no basis to make the claim that you never leave it -- you can
//	have no evidence one way or the other.

>      }

//- I presume THIS is the statement (below) that you are never reaching
//	the brace above is the final brace for the "for" loop, this checks 
//	out nicely w/ my question about the syntax youused up there.  Your
//	question should have read "I am never leaving the for loop", and
//	perhaps if you had written it that way you would have checked
//	out the for loop syntax yourself instead of concentrating on
//	trying to find a problem in the first "if" statement.

>   statement;
>   }

Well, do I win?

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Lazy day, Sunday afternoon.			|
Like to get your feet up, watch TV.		|	-Richard Hartman	
Sunday roast is something good to eat,		|	hartman@uLogic.COM
must be lamb to day 'cause beef was last week!	|

Newsgroups: comp.lang.c
From: fjh@munta.cs.mu.OZ.AU (Fergus James HENDERSON)
Subject: Re: Problem in Turbo C/C++ with DOS.H
Organization: Computer Science, University of Melbourne, Australia
Date: Tue, 6 Oct 1992 18:39:16 GMT

joec@fid.morgan.com (Joe Collins) writes:

>Anyway, in the code I use:
>     #include <dos.h>
>and compile the code and get compile errors in dos.h (!).

At a guess, I think that you may be compiling with strict ANSI mode
on, which won't work for <dos.h>.

Of course, the error message is hardly informative.
Borland should have put something like this

	#if __STDC__	/* file was compiled in strict ANSI mode */
	#error "<dos.h> is not an ANSI C standard header file"
	#error

at the start of their non-standard header files.

-- 
Fergus Henderson             fjh@munta.cs.mu.OZ.AU      
This .signature virus is a self-referential statement that is true - but 
you will only be able to consistently believe it if you copy it to your own
.signature file!
Newsgroups: comp.lang.c
From: goudreau@batman.rtp.dg.com (Bob Goudreau)
Subject: Re: SUMMARY:  Preferences toward case sensitivity/insensitivity
Date: Wed, 30 Sep 92 16:45:52 GMT
Organization: Data General Corporation, RTP, NC

In article <312@ulogic.UUCP> hartman@ulogic.UUCP (Richard M. Hartman) writes:
> the older C convention would make that function set_student_status(),
> which is takes two additional chars to type, which is why I think they
> finally tried to promote the caps-start-words (or is that CapsStartWords)
> convention.

Who is this mysterious "they", and what evidence do you have that
this practice is generally accepted by C programmers as a "new
convention" for naming?

Personally, I find any underscore-less convention hard to read,
even if caps are used to start the individual components.  Are you
sure this alleged new convention isn't just a plot by some former
Pascal programmers?

----------------------------------------------------------------------
Bob Goudreau			Data General Corporation
goudreau@dg-rtp.dg.com		62 Alexander Drive	
+1 919 248 6231			Research Triangle Park, NC  27709, USA
From: hartman@ulogic.UUCP (Richard M. Hartman)
Newsgroups: comp.lang.c
Subject: Re: Memory Allocation Question
Date: 1 Oct 92 18:46:52 GMT
Article-I.D.: ulogic.360
Organization: negligable

In article <1992Oct1.061758.23927@cs.rose-hulman.edu> Elvis P.@graceland.rock.and.roll writes:
>
>I have a thing that I want to allocate memory for as follows:
>
>	int *thing[2];
>
>First of all, I think this means an array of how ever much space I  
>allocate, with 2 fields.
>ie.  thing[100][0] and thing[100][1]

Nope.  It's an array of two pointers to integers.

>Well, how do I allocate memory for it?

	thing[0] = (int *) malloc(sizeof(int) * 100);
	thing[2] = (int *) malloc(sizeof(int) * 100);

>Sorry if this is a stupid question.

You don't find out if you don't ask.


You could step back once more and try:

	int **ppInts;
	int **pp;
	int i;

	ppInts = (int **) malloc(100 * sizeof(int *));

	for (i=0, pp=ppInts; i<100; i++, pp++)
		*pp = (int *) malloc(sizeof(int) * 2);

This will get you something of the shape you originally inferred,
an array of 100 pointers to 2-int-long arrays.

I won't try to get into how to refer to them.  If your compiler
is kind you may be able to use
	ppInts[0..99][0..1]

But I am not certain.  When/where arrays & pointers can and 
cannot be treated as the same thing gets a little tricky at
times.

I tend to just use pointers as pointers, not bad once you get
used to it.

		-Richard Hartman
		hartman@ulogic.COM

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Practice random kindness and senseless acts of beauty.
Newsgroups: comp.lang.c
From: alpha@waggen.twuug.com (Joe Wright)
Subject: Re: ++i = i++ ?
Organization: ALPHA, Box 68621, Va. Beach, VA 23455
X-Newsreader: TIN [version 1.1 PL6]
Date: Wed, 30 Sep 1992 02:19:28 GMT

Gary Merrill (sasghm@theseus.unx.sas.com) wrote:
: 
: In article <1992Sep28.184140.4116@kpc.com>, hollasch@kpc.com (Steve Hollasch) writes:
: |> 
: |>     I'll assume that you made a typo here and really meant to say
: |> 
: |>         for (i=0; i < Count; ++i)
: |>                            ^ A comma here is a syntax error.
: 
: Well, since no one else pointed this out, and in order to forestall
: additional errors and confusion ...
: 
: A comma here is *not* a syntax error!  The syntax error is
: 
:          for (i=0; i < Count, ++i)
:                                  ^
:                                  missing ';'
: 
: Now I admit that
: 
:          for (i=0; i < Count, ++i; )
: 
: would be pretty unusual code, but it is *syntactically correct*.
: (And indeed, there *are* cases when one might *want* a comma
: operator in the middle clause.)
: -- 
I don't think so.  The comma operator separates two statements and
ensures the statements are evaluated left to right.  Using the above
'i < Count, ++i;' as a for control will ignore the 'i < Count' and
return the ++i condition.  The condition will be 'true' until i goes
from -1 to zero.  Not very useful.

-- 
Joe Wright  alpha@waggen.twuug.com  
Newsgroups: comp.lang.c
From: dwight@hyphen.com (Dwight Ernest)
Subject: Re: Getting file attribute from SunOS
Organization: Hyphen, Inc., Wilmington, MA 01887 USA / +1 508 988-0880
Date: Sun, 4 Oct 1992 19:12:01 GMT

gsen@twins.goldstar.co.kr writes:

>Does anybody know how to get file attributes from existing files in 
>SUNOS ?  It seems to me 'dir.h' can give only file names and number
>of files in a specified directory.  The attribute info I'd like to 
>get is "date and time".  Any help will be appreciated.
>--Hee-won Seo

This probably belongs in comp.unix.programmer instead of comp.lang.c.

There are three different timestamps available in most UNIX implementations:
creation time, access time, and modification time.  All three are available
with the 'stat()' call.  You can read more about it in section 2V of the
manual.

-- 
--Dwight A. Ernest   Special Projects Engineer   I speak only for myself.
  Hyphen, Inc. / 187 Ballardvale St. / Wilmington, MA 01887 / +1 508 988 0880
  dae@world.std.com		dwight@hyphen.com
From: un032314@wvnvms.wvnet.edu
Newsgroups: comp.lang.c
Subject: HELP: Null pointer assignment
Date: 5 Oct 92 01:59:20 GMT
Organization: West Virginia Network for Educational Telecomputing

What is the best way to search for the cause of "Null pointer assignmet" error
on termination of the program.  I am using BC++ and the small memory model.

I believe I can trace through the code, but I don't know where the first
few bytes of the data segment are, so I can't watch them for a change.

Any ideas.

Please mail responses to me or post answers.

Thank you.

Alan  UN032314@wvnvms.wvu.edu
Newsgroups: comp.lang.c,comp.unix.programmer,comp.sys.mac.programmer
From: db21@cbnewsc.cb.att.com (david.beyerl)
Subject: Re: Easter was: Re: Algorithm for Day-Of-Week NEEDED
Organization: AT&T
Date: Sat, 26 Sep 1992 11:23:47 GMT
Followup-To: comp.unix.programmer
Summary: Here's where to locate an algorithm.

In article <DM.92Sep24220600@stekt2.oulu.fi>, dm@stekt2.oulu.fi (Hannu Helminen) writes:
> 
> Does anyone have working C-code to determine when it is Easter in a
> given year? It would be handy since I am currently writing a calendar
> utility in C. Pointers to such code would also be appreciated.
> 
	An algorithm for the date of Easter is presented on pages
155-156 in "The Art of Computer Programming, Fundamental Algorithms,
Volume 1, by Knuth.  Below is C-source I obtained from someone on the
net.

						Dave Beyerl
						att!ihlpm!db21
---------------------------------------------------------------------
From att!world.std.com!geoff Thu Jan 09 12:31:28 0500 1992
Subject: Re: Easter Sunday algorythm 

Here you go; enjoy.

# To unbundle, sh this file
echo easter.c 1>&2
sed 's/^X//' >easter.c <<'!'
X/*
X * easter - compute date of easter
X *	see The Art of Computer Programming, Vol. 1, pp. 155-6.
X */

X# include <stdio.h>
X# include <time.h>
X# include <sys/types.h>

X# define CENTURY 100
X# define LEAP 4
X# define WEEK 7
X# define MARCH_DAYS 31
X# define APRIL 3
X# define METONIC 19
X# define BASEYEAR 1900	/* add to localtime(t)->tm_year */
X# define GREGORY 1582	/* start of gregorian calendar */

main(argc, argv)
char ** argv;
X{
X	if (argc > 2)
X		fprintf(stderr, "usage: easter [year]\n");
X	else if (argc == 2)
X		easter(atoi(argv[1]));
X	else
X		easter(this_year());
X	exit(0);
X}

this_year()
X{
X	register struct tm * lp;
X	time_t t;
X	extern struct tm * localtime();
X	extern time_t time();

X	t = time(&t);
X	lp = localtime(&t);
X	if (lp->tm_mon > APRIL)
X		lp->tm_year++;
X	return(lp->tm_year + BASEYEAR);
X}

easter(year)
register int year;
X{
X	register int epact, fullmoon;
X	int golden, century, noleap;

X	if (year < GREGORY) {
X		printf("%d: before Gregory\n", year);
X		return;
X	}
X	golden = year % METONIC + 1;
X	century = year / CENTURY + 1;
X	noleap = 3 * century / LEAP - 12;
X	epact = (11 * golden + 20 +
X		(8 * century + 5) / 25 - 5	/* moon orbit correction */
X		- noleap) % 30;
X	if (epact < 0)
X		epact += 30;	/* make remainder positive */
X	if (epact == 25 && golden > 11 || epact == 24)
X		++epact;
X	fullmoon = 44 - epact;
X	if (fullmoon < 21)
X		fullmoon += 30;
X	fullmoon += WEEK - (
X		(int)(5L * year / LEAP) - noleap - 10
X		+ fullmoon) % WEEK;	/* advance to Sunday */
X	if (fullmoon > MARCH_DAYS)
X		printf("%d April", fullmoon - MARCH_DAYS);
X	else
X		printf("%d March", fullmoon);
X	printf(" %d\n", year);
X}
!
From: clarke@winkle.bhpese.oz.au
Newsgroups: comp.lang.c
Subject: source code for POW function
Date: 1 Oct 92 09:13:06 +1000
Organization: BHP Information Technology, Newcastle

Can anybody on the net supply me with a copy of the source code for the
"POW" function.

Thanks in advance.


Dazza.
Newsgroups: comp.lang.c
From: xu@prim.rose.utoronto.ca (Jiefeng Xu)
Subject: problem with "#include file.c"
Organization: University of Toronto, Department of Industrial Engineering
Date: Sat, 26 Sep 1992 14:47:28 GMT

Anybody can explain me the following problem:

/*file1.c --- main program*/
#include xxxxx /*all headfile*/
#include "file2.c" /* a function*/
(omitted)

void main(void)
{
  (omitted);
  file2(); /* call the function*/
  (omitted);
}

No error message for my compiler (gcc). But when I execute the program, I find it's always staying in the file2, even it reachs the bottom of file2 (return sentence), it moves to the some block above. Alternative, I remove the #include sentence, and use "gcc file1.c file2.c", it works well.

xu@prim.rose.utoronto.ca


Newsgroups: comp.lang.c
From: wilson@rhombus.cs.jhu.edu (Dwight Wilson)
Subject: Re: unpredictable post-decrement behavior.
Organization: The Johns Hopkins University CS Department
Date: Thu, 1 Oct 1992 21:30:02 GMT

In article <355@ulogic.UUCP> hartman@ulogic.UUCP (Richard M. Hartman) writes:
>I had thought that postincrement was guaranteed to be evaluated
>after the expression it was found in was evaluated.
>
>Apparently I was wrong.
>
[deleted]

>Is it only in the new ANSI standard that this became undefined,
>or would I have been wrong in a K&R compiler too?
>

It's even worse in a K&R compiler.  K&R (1st edition) stated that
the compiler was allowed to reorder expressions using mathematically
commutative and associative operators.  That is, if you wrote 
'a * b * c', the compiler could decide to reorder that as 'c * a * b' 
(even if you used parenthesis).  Note that though the operator
is mathematically commutative and associative, it might not be
computationally commutative and associative.

ANSI revokes this freedom.  If you write a * b * c, you don't know
the evaluation order, but you do know that the compiler doesn't
compute a * c, then multiply by b.  

-Dwight

Newsgroups: comp.lang.c