私は組合を持っています、わかりました。
この共用体は構造体の内部にあり、その共用体には名前が付けられていません (何か)。
typedef enum TYPES {INT, FLOAT, CHAR, POINTER TO FUNCTION /* Please pay attention on this */};
typedef struct {
TYPES type;
union {
int integer;
float real;
char letter;
char *string;
/* here we have a pointer to function syntax but I don't remember how to write it right now*/
}
} MY_STRUCT;
このように構造体を初期化します。
MY_STRUCT test = {INT, 22};
定義により、この種の初期化を使用すると、ユニオンの最初のフィールドが使用されるため、これが機能することはわかっています。
問題は
、初期化をこのように書くとどうなるかということです。
MY_STRUCT test = {INT, 22.2};
float値を取得しようとすると、正しい値が得られますか?
float var = (float)test.real;
これは正しいことを示しますか?
これはすべてのタイプで機能しますか?関数 1 へのポインタでさえ?
初期化によって値がユニオンの最初のフィールドに入れられるという定義により、floatがintよりも大きい場合に問題があるので、これを尋ねていますか? 私はこれを知らないので、関数へのポインターがintよりも大きい場合があることを知っているので、最初のメンバーとして関数へのポインターを使用して共用体を記述する必要がありますか?
GCC は型パニングをサポートしており、Linux カーネルでさえ型パニングを使用していると読みました。したがって、その構造体でこの種の初期化を使用でき、その後、正しい値を取得できるかどうかだけが心配です。