2017/03/09

[c/c++]先頭にアンダーラインを付けようとしたが、やめた

前回の続きだ。

static library、まあ「*.a」のファイルと思ってもらえば良いか。
そのタイプだと、単にオブジェクトをまとめただけなので、オブジェクト間で共有したい関数をstaticにすることができない。
だから、リンクする人には見えてしまう。

 

今まで、それが嫌な場合は、#includeでソースファイルをインクルードさせることで、ファイルだけ分割させることがあった。
目的は果たせるのだけど、すっきりしないので、コンパイラ依存でも良いから方法があるなら何でもよかったのだ。
しかし、方法がまだ見つかっていない。。。

 

そこでふっと思い出したのが、アンダーライン「_」だ。
システムなどが使うから、先頭にアンダーラインを付けた名前はいかんよ、というルールだったと思う。
今こそ、そのアンダーラインを使うときでは無かろうか?

・・・アンダーラインを付けないようにしたルールって、なんだっけ?


今回は、オライリー『Cクイックリファレンス』で調べる。
どの章になるのか分からなかったが、「16章 標準ヘッダ」の、"16.1.3 予約識別子"がよかろう。

思ったより、幅広いルールだった。

  • 2つの下線または下線の後に英大文字から始まる識別子は予約済み
  • 下線から始まる他のすべての識別子はファイルスコープで識別子として予約済み

えーっと、まず、下線2つはダメ。
下線1つと大文字も、ダメ。

ファイルの中で閉じているなら、下線1つと小文字ならOK。
staticな関数や変数、引数やマクロ名なんかには使えるけど、公開する関数名には使えない。

ほぼ全部やん!
残ってないやん!!
この項目の前に「標準ライブラリで」と書かれているので、何とか逃げようと思ったが、そんな無理はやめた方がよいだろう。

 

識別子の先頭として使える文字で"_"でないものを考えていたが、よいものがない。
VC++などであれば日本語のようなものも使えそうだが、どのコンパイラでもというのは難しいだろう。

うーん、アンダーラインのルールはもう少し緩くしてほしかったところだ。
2つはダメだけど、3つは使ってよい、とか。

実際のところ、アンダーラインで始まった名前を使ったとしても、コンパイルエラーになることはないだろう。
もしなったら、別の名前にすれば良いだけのことだ。
ただそれは、「車が通っていないから赤信号だけど渡ってしまおう」というのと同じで、問題はないけど割り切れない感じが残ってしまう。

 

私の模索は続く。。。

0 件のコメント:

コメントを投稿

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