如何在C中取消设置变量以允许稍后使用具有不同数据类型的相同名称?

我想在C程序中使用不同数据类型的相同变量名而不进行强制转换。

我真的想这样做,不要问为什么。

那我该怎么办呢?
如果在进行预防性取消时该变量不存在,我该如何处理错误?

你不能。 您可以获得的最接近的是创建单独的范围并在其中使用相同的变量名称:

{ int val; // do something with 'val' } { double val; // do something with 'val' } 

如果希望使用两种不同类型引用相同的内存,请使用union。 否则,要知道接下来是一个可怕的想法。

 int foo; float bar; #define MY_NAME foo // use MY_NAME as an int. #undef MY_NAME #define MY_NAME bar // use MY_NAME as a float. 

我不相信这在C中是可能的。我可以想象这样做的唯一方法是编写程序,使得两个不同的变量存在于完全不同的范围内。 比如当你在不同的function中使用它们时。 除此之外,你坚持使用你的第一个变量,选择一个不同的名称。

我的建议 – 如果你绝对要求在同一范围内存在 – 将在名称前加上一个类型识别字母,所以:

 int iVal; double dVal; 

使用void指针并适当地转换…

到现在你应该问“WTF?” – 是的,当你提出重新输入变量的想法时,你应该问自己这是什么:)

定义具有已存在名称的变量时,新定义“隐藏”旧定义。

 #include  int main(void) { int variable = 42; printf("variable is an int and its value is %d\n", variable); { double variable = -0.000000000000003; printf("variable is a double and its value is %g\n", variable); } { FILE *variable = NULL; printf("variable is a FILE * and its value is NULL :-)\n"); } printf("variable is an int again and its value is, again, %d\n", variable); return 0; } 

您无法在C中更改变量的类型。您可以使用一些预处理器技巧来获得您想要的幻觉。 即

 int myvar = 10; // code using myvar as an int #define myvar _myvar char *myvar = "..."; // code using myvar as a char* 

话虽如此,我不能强烈劝阻这一点。 不要这样做!