C言語のファイルの単位

 PIC32でソフトウエアをせっせと書いている。自分が設計したハードウエアの上で動く、ハード寄りの関数を揃えて、アプリを作るメンバーから使えるようにする必要がある。
 実装設計で、意外に難しいのが、ファイルの単位をどうするか、である。関数のスコープが、ファイル単位に限定されるstaticか、グローバルか、の2つしかないからである。前にも書いたが、私は、組み込みでC++を使うのは、懐疑的である。移行コスト(内部の技術者教育も含め)に比べ、得られるメリットが明確でないからだ。だが、このスコープの問題は、C++がうらやましい。名前空間が使えるからである。
 とはいえ、このスコープの問題だけでC++に移行する気にもなれないので、がんばって、同種の関数群を1つのファイルにまとめ、その関数群から使われる補助的な関数をstaticにして、アプリ屋が組む関数の名前と衝突することがないようにする。関数群で共通に使うグローバル変数も、static宣言して、アプリ屋が組む変数の名前と衝突することがないようにする。まあ、ハード寄りなので、UART関係の関数群、SPI関係の関数群という単位でまとめればいいので、マジメにやっておけば、困ることはないのだが。

2件のコメント

  1. 関数名の衝突に関してはCでも関数名にプリフィックスを付けて実装するようにしています。
    C++のように名前空間とは別ですが、衝突の心配が減りそうです。
    プリフィックスはかぶりにくいものにする必要はありますが。

  2. TSSです。

    私も関数名はプリフィックスをつけています。欠点は、名前が長くなりすぎることです。
    関数名以上に地味にいやなのは、enum。enumを多用するので、名前の管理が大変です。
    名前空間だけは、C言語にも採用して欲しいです。

コメントを残す

メールアドレスが公開されることはありません。