しかし、お仕事でやっていると、ときどき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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。