2016/09/07

[c/c++]私のC言語 (13) - ファイル名引数はconstにしておくれ

open()やfopen()のファイル名は、const char*だ。
しかし、お仕事でやっていると、ときどきchar*にしている自作関数に出会うのだ。
そういうのに限って、みんなが使うような関数になっている。。。
中身を書き換えないポインタ引数はconstにしておくれ、というのが主張なのだけど、ファイル名以外ではまあまあconstにしてあるように思える。
つまり、ファイル名のときだけconstがない場合が多いような気がするのだ。
まあ、たまたまそういう会社に数社当たっただけかもしれんがね。

const無しのポインタ変数にconstのポインタ変数を引数で渡すと、だいたいコンパイルエラーになる。
回避するには、こんな手段くらいしか思いつかない。
  • constのデータをRAMにコピーして引数に渡す
  • constを外した形でキャストして引数に渡す
後者は、やりたくない。
やりたくないのだが、わざわざファイル名のためだけにRAMを確保するのも腹が立つし。
そもそも、ファイル名を書き換えるとしたらどういう場合だ?
あり得んだろう!と、いろいろ思考をごまかして、コードを確認して書き換えていなかったら、ときどきキャストで逃げている。

ファイル名なんて固定で持っておくことも多いと思う。
もし、
char fname[] = "/foo/bar/hogehoge.conf";
なんて書いたら、
  • 初期値"/foo/bar/hogehoge.conf"をROMで持つ
  • fnameのスタック確保
  • fnameの初期化
が行われるではないか。
constで持っておけば、ROMのサイズだけで済むのに。。。

まあ、RAMの方がFLASHよりアクセス速いよねー、と言われるとどうしようもないのだが、少なくともファイル名は関係ないよな、と思う。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。