キャストせずにCプログラムで同じ変数名を異なるデータ型で使用したい。
理由は聞かないで本当にやりたい。
どうすればそれができますか?また、予防的
な設定解除
中にこの変数が存在しない場合、どのようにエラーを処理できますか?
できません。あなたが得ることができる最も近いものは、別々のスコープを作成し、それらの中で同じ変数名を使用することです:
{
int val;
// do something with 'val'
}
{
double val;
// do something with 'val'
}
同じメモリを 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.
ボイドポインタを使用して適切にキャストします...
今では「WTF?」と尋ねる必要があります。-そして、はい、それはあなたがあなたの変数を再入力するという考えを思いついたときにあなた自身に尋ねるべきだったものです:)
これが C で可能だとは思いません。これを行うと想像できる唯一の方法は、2 つの異なる変数が完全に異なるスコープに存在するようにプログラムを作成することです。さまざまな機能で使用する場合など。それ以外は、最初の変数にこだわっています。別の名前を選んでください。
私の提案-同じスコープに存在することが絶対に必要な場合-名前の前にタイプ識別文字を付けることです。
int iVal;
double dVal;
すでに存在する名前で変数を定義すると、新しい定義によって古い定義が「隠蔽」されます。
#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;
}
C では変数の型を変更することはできません。ちょっとしたプリプロセッサのトリックを使用して、必要なものを錯覚させることができます。すなわち
int myvar = 10;
// code using myvar as an int
#define myvar _myvar
char *myvar = "...";
// code using myvar as a char*
そうは言っても、私はこれを十分に思いとどまらせることはできません。それをしないでください!