1. ホーム
  2. c

[解決済み】typedef 固定長配列

2022-04-03 21:58:26

質問

24ビットのデータ型を定義する必要があります。 char[3] を使用して型を表現します。を型付けすることはできますか? char[3] から type24 ? コードサンプルで試してみました。私は typedef char[3] type24; をヘッダーファイルに追加しました。コンパイラはそれについて文句を言わなかった。しかし、私が関数を定義したとき void foo(type24 val) {} と文句を言われました。次のような関数を定義できるようにしたい。 type24_to_int32(type24 val) の代わりに type24_to_int32(char value[3]) .

解決方法は?

typedefは次のようになります。

typedef char type24[3];

しかし、これはおそらく非常にまずい考えです。なぜなら、結果として得られる型は配列型ですが、それを使う人にはそれが配列型であることが分からないからです。関数の引数として使われる場合、それは値ではなく参照で渡されることになります。 sizeof というのは間違いです。

より良い解決策は

typedef struct type24 { char x[3]; } type24;

また、おそらく unsigned char の代わりに char というのは、後者は実装で定義された符号を持つからです。