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 Mossquite 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