5

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

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

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

4

6 回答 6

15

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

 {
     int val;

     // do something with 'val'
 }

 {
     double val;

     // do something with 'val'
 }
于 2010-12-06T23:15:12.717 回答
2

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

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.
于 2010-12-06T23:17:25.860 回答
1

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

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

int iVal;
double dVal;
于 2010-12-06T23:15:21.063 回答
1

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

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

于 2010-12-06T23:24:30.250 回答
0

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

#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;
}
于 2010-12-06T23:17:20.000 回答
0

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

int myvar = 10;

// code using myvar as an int

#define myvar _myvar

char *myvar = "...";

// code using myvar as a char*

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

于 2010-12-06T23:19:53.933 回答