Skip to content

Cのビットフィールドは使うな

Kernighan&Pikeの「プログラミング作法」でビットフィールドは使うなと書かれてあるが、Gitのソースコードでは意外とよく使われていた。

ずっと、ビットフィールドのことを詳しく調べずに、如何ほどなのかと思っていたが、C言語のbitfieldの仕様と実装を調査した話に答えがあった。

CPUアーキテクチャのint型のビット幅以下のbitfieldを宣言して、そこに隙間のない(paddingがない)ピッタリのビットを定義すれば、コンパイラやアーキテクチャが変わっても仕様上は想定外のレイアウトにならない

そこまでやっても嬉しさは少ないのでビット演算する方がいい。