Как я могу сбросить переменную в C, чтобы впоследствии разрешить использование одного и того же имени с другим типом данных? - PullRequest
6 голосов
/ 07 декабря 2010

Я хочу использовать одно и то же имя переменной с другим типом данных в программе на Си без приведения.

Я действительно хочу сделать это, не спрашивай почему.

Так как я могу это сделать?
И как я могу обработать ошибку, если эта переменная не существует во время выполнения профилактического сброса?

Ответы [ 6 ]

15 голосов
/ 07 декабря 2010

Вы не можете.Самое близкое, что вы можете получить, - это создать отдельные области и использовать в них одно и то же имя переменной:

 {
     int val;

     // do something with 'val'
 }

 {
     double val;

     // do something with 'val'
 }
2 голосов
/ 07 декабря 2010

Если вы хотите, чтобы на одну и ту же память ссылались два разных типа, используйте объединение.В противном случае знайте, что то, что следует, является ужасной идеей.

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.
1 голос
/ 07 декабря 2010

используйте указатель void и примените соответственно ...

сейчас вы должны спрашивать "WTF?"- и да, это то, о чем вы должны были спросить сами, когда пришли к мысли о повторном вводе переменных:)

1 голос
/ 07 декабря 2010

Я не верю, что это возможно в C. Единственный способ, которым я могу себе представить, это написать вашу программу так, чтобы две разные переменные существовали в совершенно разных областях. Например, когда вы используете их в разных функциях. Кроме этого, вы застряли с первой переменной, выберите другое имя.

Мое предложение - если вам абсолютно необходимо, чтобы оно существовало в той же области видимости, - заключалось бы в префиксе имени с идентифицирующей буквой типа, поэтому:

int iVal;
double dVal;
0 голосов
/ 07 декабря 2010

Вы не можете изменить тип переменной в C. Вы можете использовать небольшую хитрость препроцессора, чтобы получить иллюзию того, что вы хотите.то есть

int myvar = 10;

// code using myvar as an int

#define myvar _myvar

char *myvar = "...";

// code using myvar as a char*

При этом я не могу отговорить это достаточно сильно.Не делай этого!

0 голосов
/ 07 декабря 2010

Когда вы определяете переменную с именем, которое уже существует, новое определение «скрывает» старое.

#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;
}
...