1. How to solve warning: cast to pointer from integer of different size and vice versa:
cpp
#include <stdio.h>
int main() {
void *p = NULL;
int a = 3;
p = (void *)a;
a = (int)p;
printf("%ld\n", p);
printf("%ld\n", a);
return 0;
}
The above code has the following warnings when compiling:
cpp
/tmp/0pubXc3fmS.c: In function 'main':
/tmp/0pubXc3fmS.c:7:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
7 | p = (void *)a;
| ^
/tmp/0pubXc3fmS.c:8:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
8 | a = (int)p;
| ^
/tmp/0pubXc3fmS.o
Converting pointer/data to (unsigned) long before casting to required data types can eliminate this warning: (intptr_t works the same)
cpp
#include <stdio.h>
int main() {
void *p = NULL;
int a = 3;
p = (void *)(long)a;
a = (int)(long)p;
printf("%ld\n", p);
printf("%ld\n", a);
return 0;
}