Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10 Apollo 8/9/84; site apollo.uucp
Path: utzoo!linus!decvax!wivax!apollo!nazgul
From: nazgul@apollo.uucp (Kee Hinckley)
Newsgroups: net.lang.c
Subject: Re: What is setjmp... Clarification and typedef gripe
Message-ID: <22197810.8e4@apollo.uucp>
Date: Mon, 1-Oct-84 14:39:17 EDT
Article-I.D.: apollo.22197810.8e4
Posted: Mon Oct  1 14:39:17 1984
Date-Received: Wed, 3-Oct-84 07:26:20 EDT
Organization: Apollo Computer, Chelmsford, Mass.
Lines: 39

...
Gary Moss  quite rightly pointed
out that one should never declare the jump buffer as being some
explicit size, but should instead use the typedef "jmp_buf" sitting in:

            /usr/include/setjmp.h

This way you'll avoid the machine dependance problem.

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 
#include 

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?

                                            -kee