[comp.sys.mac.programmer] Think C & System 7.0b

gaines@mars.njit.edu (Starman) (02/16/91)

Other than what little documentation the CD Rom has, I can't seem to
figure this out: I'm re-writing my graphics program for System 7
goodies. First off, why doesn't the compiler like <stdio.h>? For some
reason it says "#define NULL 0L already defined". Then, when I try to
compile my module with SFPut, it says that the call doesn't match the
prototype. Ick! This makes no sense at all to me. Any help, people?

===========================================================================
"They can fly rings around the moon,	      |		 Mike
but we're years ahead of them on the highway" |	  gaines@mars.njit.edu
		System 7 on an 800k floppy?   HA!
===========================================================================

chaffee@reed.UUCP (Alex Chaffee) (02/19/91)

In <2322@njitgw.njit.edu> gaines@mars.njit.edu (Starman) writes:

>Other than what little documentation the CD Rom has, I can't seem to
>figure this out: I'm re-writing my graphics program for System 7
>goodies. First off, why doesn't the compiler like <stdio.h>? For some
>reason it says "#define NULL 0L already defined". Then, when I try to
>compile my module with SFPut, it says that the call doesn't match the
>prototype. Ick! This makes no sense at all to me. Any help, people?

I haven't looked into the first problem, but the second seems to be an
actual bug/typo in the new Think C headers. I got around it by going into
StdFile.h, finding the prototypes section at the end of the file, and
changing all references to "SFTypeList *" to "SFTypeList".  (Then
recompiling MacHeaders). The SF routines expect a SFTypeList (an array,
therefore a pointer), but the prototype expects an SFTypeList * (a pointer
to an array, therefore a **).

Can any Symantec lurkers throw some light on this?

 - Alex

-- 
Alex Chaffee
chaffee@reed.{UUCP,BITNET}
Reed College, Portland OR 97202
____________________

chaffee@reed.UUCP (Alex Chaffee) (02/26/91)

	Gad!  Not *this* topic again :-)!

Not "again," "still." :)

	To restate K&R, arrays become pointers to their first elements when
	used as parameters in a function call.

Understood.

	The decision to use the address of the typelist is based on the C
	User Manual, which states that you should pass the address of any
	toolbox argument whose size is greater than 4 bytes.  If you use
	sizeof(), you'll find that it's 16 bytes.  Ergo, pass it by address.

Aha! So that's the rationale.  It makes sense now. However, it was a shock to
find that *your* code - the Think Class Library code, specifically
CApplication.c - broke.  Thus you released improper code -- naughty,
naughty! ;) (By the way, I still prefer passing my arrays as pointers, so
I'll keep my change to the .h file.)

	Re: System 7.0, you may find many problems with the new headers.
	Many files have changed, and more functions are prototyped that
	weren't before.  Problems with prototypes shouldn't be too hard to
	fix, though.

	-phil
	--
	   Phil Shapiro                           Technical Support Analyst
	   Language Products Group                     Symantec Corporation
			Internet: phils@chaos.cs.brandeis.edu

With nothing better to do than pick semantic nits late at night, I remain,

- Alex

-- 
Alex Chaffee
chaffee@reed.{UUCP,BITNET}
Reed College, Portland OR 97202
____________________