9月 09 2007
#pragma once
C/C++ での #pragma once。#pragma once は gcc などでは非推奨ということになっていたはず(この辺は記憶が定かではなかった)。そして自分はその理由を portablity だとばかり思っていたのですが、ちょっと検索してみたら gcc でも code warrior でも使えるんですよね。
ではなぜかというと、WikiPediaのInclude_guardの記述に曰く、
(通常のインクルードガードはグローバルなマクロを使ってしまうため)多くのC,C++の実装は非標準の「#pragma once」指示子を用意している。この指示子はヘッダファイルの最初に置かれ、このファイルが1度しかインクルードされないようにする。 しかしこのアプローチは、2つの異なる場所に書かれた #include 指示子が同じヘッダファイルを指しているかどうかを知るのが根本的に困難であるため、うまくいかないことがある(例えば、シンボリックリンクの場合)。 また #pragma once は非標準な指示子であるため、動作が実装ごとに微妙に異なる可能性がある。 (私訳)
なるほど。確かにシステムのヘッダファイルとかだとありえるし、ファイル名変更時の後方互換性維持にシンボリックリンクが使えないってことか。
逆にWindowsだけで使うとか、シンボリックリンクとかコピーとか絶対にしないというポリシーにすれば、使うのにまったく問題ないのかな。
ちょっと長年の誤解と疑問が解けました。
