What is setjmp... Clarification and typedef gripe
Morris Keesan
keesan at bbncca.ARPA
Thu Oct 4 00:01:55 AEST 1984
--------------------------------------
> From: nazgul at apollo.uucp (Kee Hinckley)
> Date: Mon, 1-Oct-84 14:39:17 EDT
>
> I agree with this whole-heartedly, the only thing that bugs me is
> the way typedef works, which is essentially as a #define. For
> example:
> -----------------------------------------------------------------------
> #include <stdio.h>
> #include <setjmp.h>
>
> main()
> {
> jmp_buf foo, *tmp;
>
> tmp = &foo;
> }
> $ cc foo
>
> (0008) tmp = &foo;
> ******** Line 8: Warning: Illegal pointer combination: incompatible types.
> No errors, 1 warning, C Compiler, Rev 2.40
> -------------------------------------------------------------------------
> The error message may differ on your machine, but most compilers do at
> least give some warning. The way around it:
> tmp = (jmp_buf *) &foo;
> works, but is rather frustrating.
>
> The whole point of a typedef (in my mind at least) is to create a
> level of abstraction that alleviates the need to learn what the machine/
> compiler architecture actually looks like. To a certain degree typedef
> seems to succeed at this, but then it all falls apart. Any thoughts?
>
"setjmp foo, *tmp; tmp = &foo;" is accepted with no complaints by my C
compiler (based on the Dennis Ritchie V7 PDP11 "cc"), as it should be, because
"tmp" and "&foo" have exactly the same (defined) type. Either your C compiler
has a bug in this respect, or your <setjmp.h> is #defining jmp_buf, instead of
typedefing it. The thing to do is not gripe about the language, but gripe to
whomever maintains your compiler, to get this bug fixed.
--
Morris M. Keesan
{decvax,linus,ihnp4,wivax,wjh12,ima}!bbncca!keesan
keesan @ BBN-UNIX.ARPA
More information about the Comp.lang.c
mailing list