前回の続きだ。
static library、まあ「*.a」のファイルと思ってもらえば良いか。
そのタイプだと、単にオブジェクトをまとめただけなので、オブジェクト間で共有したい関数をstaticにすることができない。
だから、リンクする人には見えてしまう。
今まで、それが嫌な場合は、#includeでソースファイルをインクルードさせることで、ファイルだけ分割させることがあった。
目的は果たせるのだけど、すっきりしないので、コンパイラ依存でも良いから方法があるなら何でもよかったのだ。
しかし、方法がまだ見つかっていない。。。
そこでふっと思い出したのが、アンダーライン「_」だ。
システムなどが使うから、先頭にアンダーラインを付けた名前はいかんよ、というルールだったと思う。
今こそ、そのアンダーラインを使うときでは無かろうか?
・・・アンダーラインを付けないようにしたルールって、なんだっけ?
今回は、オライリー『Cクイックリファレンス』で調べる。
どの章になるのか分からなかったが、「16章 標準ヘッダ」の、"16.1.3 予約識別子"がよかろう。
思ったより、幅広いルールだった。
- 2つの下線または下線の後に英大文字から始まる識別子は予約済み
- 下線から始まる他のすべての識別子はファイルスコープで識別子として予約済み
えーっと、まず、下線2つはダメ。
下線1つと大文字も、ダメ。
ファイルの中で閉じているなら、下線1つと小文字ならOK。
staticな関数や変数、引数やマクロ名なんかには使えるけど、公開する関数名には使えない。
ほぼ全部やん!
残ってないやん!!
この項目の前に「標準ライブラリで」と書かれているので、何とか逃げようと思ったが、そんな無理はやめた方がよいだろう。
識別子の先頭として使える文字で"_"でないものを考えていたが、よいものがない。
VC++などであれば日本語のようなものも使えそうだが、どのコンパイラでもというのは難しいだろう。
うーん、アンダーラインのルールはもう少し緩くしてほしかったところだ。
2つはダメだけど、3つは使ってよい、とか。
実際のところ、アンダーラインで始まった名前を使ったとしても、コンパイルエラーになることはないだろう。
もしなったら、別の名前にすれば良いだけのことだ。
ただそれは、「車が通っていないから赤信号だけど渡ってしまおう」というのと同じで、問題はないけど割り切れない感じが残ってしまう。
私の模索は続く。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。