ついつい沢山投稿しちゃうなあ。
やりたい事メモ
・名前空間の使い方を変える。
モジュール名を名前空間名にしていたが、名前空間名を統一する。
シンボルはクラス内だから、モジュール同士で衝突する心配はないかな。
・インクルードガードをpragmaからifndefに乗り換える。
冗長インクルードガードを書くため。
(これらの内容についてアドバイスなどあれば是非どうぞ。)
メモ
Re: メモ
どうも、こんばんわ
モジュール、シンボルと、あまりC++では聞きなれない単語ですね。
他の言語の用語でしょうか?それともC++でも普通に使うんですかね…
シンボルって、識別子と同義な何かかと思っていました。
冗長インクルードガードって、今日のコンパイラでは意味があるのでしょうか。
GCCでは確か無意味というか、何もせずとも冗長インクルードガードをしてくれるような仕様だったと思いますが、
VC++は今でも違うのだろうか…
まあ、いずれにせよ#pragma onceは標準規格では定められてないでしょうから
改めたほうがいいんでしょうね…といいつつ、私は使ってしまうんですけれど。
モジュール、シンボルと、あまりC++では聞きなれない単語ですね。
他の言語の用語でしょうか?それともC++でも普通に使うんですかね…
シンボルって、識別子と同義な何かかと思っていました。
冗長インクルードガードって、今日のコンパイラでは意味があるのでしょうか。
GCCでは確か無意味というか、何もせずとも冗長インクルードガードをしてくれるような仕様だったと思いますが、
VC++は今でも違うのだろうか…
まあ、いずれにせよ#pragma onceは標準規格では定められてないでしょうから
改めたほうがいいんでしょうね…といいつつ、私は使ってしまうんですけれど。
Re: メモ
ちょっと調べてみたのですが、#pragma onceはそのヘッダがコンパイル中に
一回しか読み込まれない(つまり展開されない)ようにしてくれるので、
冗長インクルードガードと同等のことを行ってくれるようです。(間違っていたらすみません)
MNSさんもおっしゃっている通り、最近のコンパイラでは、マクロでのインクルードガードでも
冗長インクルードガードをしてくれる実装になっているそうです。
#ifndef~#endifはシンボル名の衝突の可能性もあるので、
#pragma onceが使える環境で、移植性を考えなければ、#pragma onceを使って問題なさそうな気がします。
一回しか読み込まれない(つまり展開されない)ようにしてくれるので、
冗長インクルードガードと同等のことを行ってくれるようです。(間違っていたらすみません)
MNSさんもおっしゃっている通り、最近のコンパイラでは、マクロでのインクルードガードでも
冗長インクルードガードをしてくれる実装になっているそうです。
#ifndef~#endifはシンボル名の衝突の可能性もあるので、
#pragma onceが使える環境で、移植性を考えなければ、#pragma onceを使って問題なさそうな気がします。
Re: メモ
>MNSさん
ご意見ありがとうございます!
自分は「シンボル」を「識別子」とほとんど同義だと思ってます。大丈夫(?)です。
冗長インクルードガードについてはちょっとびっくり。
でもコンパイラの最適化のことを考えたらなるほど納得。
やっぱり最適化ってすごいですね。
まあVC++でどうかは・・・一回試してみたほうがいいですねぇ
#pragma onceは、今日のコンパイラは大体対応していると言われているらしく、
自分は特に心配なく使っております。
あくまで冗長インクルードガードを書くため・・・ですが。
上記の通りならpragmaのままでいいかも。
ご意見ありがとうございます!
自分は「シンボル」を「識別子」とほとんど同義だと思ってます。大丈夫(?)です。
冗長インクルードガードについてはちょっとびっくり。
でもコンパイラの最適化のことを考えたらなるほど納得。
やっぱり最適化ってすごいですね。
まあVC++でどうかは・・・一回試してみたほうがいいですねぇ
#pragma onceは、今日のコンパイラは大体対応していると言われているらしく、
自分は特に心配なく使っております。
あくまで冗長インクルードガードを書くため・・・ですが。
上記の通りならpragmaのままでいいかも。