What is setjmp... Clarification and typedef gripe

Spencer W. Thomas thomas at utah-gr.UUCP
Fri Oct 5 15:15:01 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?
>> 

I tried this on our apollo C compiler (the obvious one, given the return
address), and discovered that it complains (as above) about typedefs
for which the underlying type is an array, but not for structs or
"primitive" types (such as int).  On our Vax, similar code gives the
output
  "tst.c", line 7: warning: & before array or function: ignored
  "tst.c", line 7: warning: illegal pointer combination
  "tst.c", line 8: warning: illegal pointer combination
(line 7 said tmp = &foo, and line 8 said tmp = foo).  The problem seems
to be the underlying array type.

=S



More information about the Comp.lang.c mailing list