メモ

アバター
ナムアニクラウド
記事: 16
登録日時: 15年前
住所: 茨城県

メモ

投稿記事 by ナムアニクラウド » 15年前

ついつい沢山投稿しちゃうなあ。

やりたい事メモ
・名前空間の使い方を変える。
 モジュール名を名前空間名にしていたが、名前空間名を統一する。
 シンボルはクラス内だから、モジュール同士で衝突する心配はないかな。

・インクルードガードをpragmaからifndefに乗り換える。
 冗長インクルードガードを書くため。

(これらの内容についてアドバイスなどあれば是非どうぞ。)
最後に編集したユーザー ナムアニクラウド on 2010年10月23日(土) 23:56 [ 編集 1 回目 ]

アバター
MNS
記事: 35
登録日時: 15年前

Re: メモ

投稿記事 by MNS » 15年前

どうも、こんばんわ

モジュール、シンボルと、あまりC++では聞きなれない単語ですね。
他の言語の用語でしょうか?それともC++でも普通に使うんですかね…
シンボルって、識別子と同義な何かかと思っていました。

冗長インクルードガードって、今日のコンパイラでは意味があるのでしょうか。
GCCでは確か無意味というか、何もせずとも冗長インクルードガードをしてくれるような仕様だったと思いますが、
VC++は今でも違うのだろうか…
まあ、いずれにせよ#pragma onceは標準規格では定められてないでしょうから
改めたほうがいいんでしょうね…といいつつ、私は使ってしまうんですけれど。

アバター
a5ua
記事: 199
登録日時: 15年前

Re: メモ

投稿記事 by a5ua » 15年前

ちょっと調べてみたのですが、#pragma onceはそのヘッダがコンパイル中に
一回しか読み込まれない(つまり展開されない)ようにしてくれるので、
冗長インクルードガードと同等のことを行ってくれるようです。(間違っていたらすみません)

MNSさんもおっしゃっている通り、最近のコンパイラでは、マクロでのインクルードガードでも
冗長インクルードガードをしてくれる実装になっているそうです。

#ifndef~#endifはシンボル名の衝突の可能性もあるので、
#pragma onceが使える環境で、移植性を考えなければ、#pragma onceを使って問題なさそうな気がします。

アバター
ナムアニクラウド
記事: 16
登録日時: 15年前
住所: 茨城県

Re: メモ

投稿記事 by ナムアニクラウド » 15年前

>MNSさん
ご意見ありがとうございます!

 自分は「シンボル」を「識別子」とほとんど同義だと思ってます。大丈夫(?)です。
冗長インクルードガードについてはちょっとびっくり。
でもコンパイラの最適化のことを考えたらなるほど納得。
やっぱり最適化ってすごいですね。
まあVC++でどうかは・・・一回試してみたほうがいいですねぇ

 #pragma onceは、今日のコンパイラは大体対応していると言われているらしく、
自分は特に心配なく使っております。
あくまで冗長インクルードガードを書くため・・・ですが。
上記の通りならpragmaのままでいいかも。

アバター
ナムアニクラウド
記事: 16
登録日時: 15年前
住所: 茨城県

Re: メモ

投稿記事 by ナムアニクラウド » 15年前

>a5ua
 調べてくださってありがとうございます!

 自分もちょっと調べてみたのですが、すぐにはいい情報にありつけず・・・
冗長インクルードガードってひと昔前の技術なのかしらん。

 それにしてもこういう素朴な疑問について話すのって結構楽しいですよね。
ソースの書き方自体の洗練はどんなプログラムにも通用するからですかね。