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

Posted

技术标签:

【中文标题】如何在 C 中取消设置变量以允许稍后使用具有不同数据类型的相同名称?【英文标题】:How can I unset a variable in C to allow usage of the same name with different datatype later on? 【发布时间】:2011-05-21 06:59:19 【问题描述】:

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

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

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

【问题讨论】:

我不明白你为什么要这样做。我怀疑您正在尝试以其他方式更好地实现某些目标。您为什么不告诉我们您要做什么,以便我们可以解决您的实际问题? “不要问为什么”是错误的说法。回答此类问题的唯一方法是问为什么。 @Hans Passant:我没听懂这个笑话。 【参考方案1】:

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

 
     int val;

     // do something with 'val'
 

 
     double val;

     // do something with 'val'
 

【讨论】:

【参考方案2】:

我不相信这在 C 中是可能的。我能想到的唯一方法是编写程序,使两个不同的变量存在于完全不同的范围内。例如当您在不同的功能中使用它们时。除此之外,你被第一个变量卡住了,选择一个不同的名字。

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

int iVal;
double dVal;

【讨论】:

大声笑,或者你可以附加一个后缀或更改一个不同的名称。这是一个解决方案。 耸耸肩 在不了解上下文的情况下,无法提出更好的命名方案,因此这是针对这种情况的最佳通用方案;) 同意。对于它的价值,我属于根据实际目的命名变量的阵营。因此,拥有两种不同类型的两个变量并希望将它们都称为val 的问题对我来说并不会经常发生:)【参考方案3】:

当您使用已存在的名称定义变量时,新定义会“隐藏”旧定义。

#include <stdio.h>
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;

【讨论】:

您在这里真正要做的是使用花括号创建不同的范围,其中variable 作为3 个单独的变量存在。 @Justin Spahr-Summers 已经提出了这个建议,而且 - 至少在 IMO - 这似乎并不是 OP 所要求的。 我同意@GreenMat。这只是 OP 的另一个例子。【参考方案4】:

如果您想用两种不同的类型引用相同的内存,请使用联合。否则,要知道接下来的想法很糟糕。

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.

【讨论】:

@sgolodetz:我知道。我有点惭愧。但它确实回答了这个问题,我想不出还有什么可以回答的。 在上下文中这是一个公平的答案 :) 虽然我猜有些问题最好不要回答......【参考方案5】:

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

int myvar = 10;

// code using myvar as an int

#define myvar _myvar

char *myvar = "...";

// code using myvar as a char*

话虽如此,但我不能足够强烈地阻止这一点。不要这样做!

【讨论】:

为什么不呢?是不是很混乱?【参考方案6】:

使用 void 指针并适当地强制转换 ...

现在你应该问“WTF?” - 是的,当你想出重新输入变量的想法时,这就是你应该问自己的问题 :)

【讨论】:

注意你的语言。

以上是关于如何在 C 中取消设置变量以允许稍后使用具有不同数据类型的相同名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置数字格式以显示C ++中的所有十进制数字? [关闭]

Oracle:如何“稍后”运行存储过程

取消设置具有相似名称的所有会话变量

如何在处理中保存设置数据,然后稍后加载以供使用

如何循环遍历数组并取消设置数组中的变量

在bash中取消设置变量检查