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