printf pointer argument type warning?

c, clang

Solution

unsigned long *test = 1;

is not valid C. If you want to have a pointer to an object of value `1`, you can do:

unsigned long a = 1;
unsigned long *test = &a;

or using a C99 compound literal:

unsigned long *test = &(unsigned long){1UL};

Now also:

printf("%lu\n", (unsigned long*)test);

is incorrect. You actually want:

printf("%lu\n", *test);

to print the value of the `unsigned long` object `*test`.

To print the `test` pointer value (in an implementation-defined way), you need:

printf("%p\n", (void *) test);

Problem

Is there a good way to get rid of the following warning? I know it's a type issue in that I'm passing a `unsigned long pointer` and not an `unsigned long`, but does printf somehow support pointers as arguments? The pedantic in me would like to get rid of this warning. If not, how do you deal with printing de-referenced pointer values with `printf`? ``` #include <stdio.h> int main (void) { unsigned long *test = 1; printf("%lu\n", (unsigned long*)test); return 0; } ``` warning: format specifies type 'unsigned long' but the argument has type

Original source