I want to set the value of the (dereferenced) passed variable to NULL if it is a const char * and to 0 if it is a double, assuming that NULL is defined as (void *)0 and sizeof(const char *) == sizeof(double), is this code safe? is there a better approach to achieve the same?
If not, please, don't suggest to use unions, I am stuck with void * (building an interpreter) and I can not pass the type as parameter, I only need those 2 type (const char * and double).
#include <stdio.h>
#include <string.h>
static void set0(void *param)
{
if (sizeof(const char *) == sizeof(double)) {
*(const char **)param = 0;
}
}
int main(void)
{
const char *str = "Hello";
double num = 3.14;
printf("%s\n", str);
printf("%f\n", num);
set0(&str);
if (str != NULL) {
printf("%s\n", str);
}
set0(&num);
printf("%f\n", num);
return 0;
}