2016/09/07

[c/c++]私のC言語 (12) - includeガード

ヘッダファイルは、2回以上読込まれないようにするために、いわゆるincludeガードをすると思う。
私の名前付けルールは、こんな感じだ。

#ifndef MY_HEADER_H__
#define MY_HEADER_H__

~~

#endif //MY_HEADER_H__

 

昔は、マクロ名の前にアンダーラインを置いていた。
たぶん、読んだ本だか参考にしたコードがそうなっていたからだろう。
C言語規格上、それはよろしくないというのを知ってからは、使わないようになった。

コーディング作法ガイドでもp.75にその話が書かれていた。
マクロ名だけ気にしていたのだが、変数名や関数名もそうなのだな。
まあ、2回使われているなら衝突してビルド時に気付きそうな気もするが、使っただけで動作が変わるマクロとかがあるとやっかいだから、使わないに越したことはないだろう。

 

最近知ったのだが、gccでもincludeガードの#pragma onceが使えるようだった。

#pragma once

VC++だけかと思っていたが、けっこうあるんだな。。。
gccも3.4からってことは、ずいぶん前から使えたんだ。

たまにやってしまうのが、ヘッダファイルをコピーして中身を書き換えるのだが、ガード下マクロ名を変更し忘れる、というものだ。
includeが重なっていなければうまくいくけど、順番によってもう片方が無効になってしまうので、しばし理由がわからずに悩んでしまうのだ。

でもまあ、pragmaだから、こういうルールはプロジェクトで統一した方が良かろうね。

0 件のコメント:

コメントを投稿

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