RSS | technovelty home | page of ian | ian@wienand.org
cdecl is another tool that has been around since the
days when Trumpet Winsock and SLIP were cutting edge (the README says
1996) which I just found a use for.
I find it handy for debugging things like
#include <stdio.h>
#include <setjmp.h>
jmp_buf j;
extern int* fun1(void);
extern int* fun2(void);
extern int* fun3(void);
int* foo(int *p);
int* foo (int *p)
{
p = fun1();
if (setjmp (j))
return p;
/* longjmp (j) may occur in fun3. */
p = fun3();
return p;
}
ianw@lime:/tmp$ gcc -g -c -O2 -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror -g -O3 jmp.c
cc1: warnings being treated as errors
jmp.c: In function 'foo':
jmp.c:11: warning: argument 'p' might be clobbered by 'longjmp' or 'vfork'
I can never remember the correct volatile for this situation
ianw@lime:~$ cdecl cdecl> explain volatile int *p declare p as pointer to volatile int cdecl> explain int *volatile v declare p as volatile pointer to int
So clearly the second version is the one I want, since I need to indicate that the pointer value might change underneath us. Nifty!
posted at: Wed, 02 Nov 2005 14:28 | in /code/c | permalink | add comment (0 others)

This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.