C++のスタイリングガイド
C/C++の書き方についてはGoogleが作ったC++のスタイルガイドが参考になります。
よい書き方/よくない書き方の例に加え、メリット/デメリットなども書いてあるため、自分のアプリケーションで採用するかどうかの判断材料になります。
また、cpplint
というリンターもあります。
注釈
cpplint
はもともとGoogleが開発していたオープンソースプロジェクトでしたが、現在ではGoogleの手を離れたプロジェクトになっているようです。
インクルードガード
1#ifndef Geometry_h
2#define Geometry_h 1
3
4// ヘッダーファイルの内容
5
6#endif
インクルードガード(もしくは #define
ガード)は、
同じヘッダーファイルが複数回インクルードされるのを防ぐために
ファイルの先頭に#ifndef
を使ってチェックする書き方です。
Geant4のヘッダーファイルはすべてガードが定義されています。 自分が作るコードも同じようにガードするとよいです。
前方宣言
1// #include "G4Event.hh"
2// インクルードする代わりに前方宣言する
3class G4Event;
4
5class EventAction : public G4UserEventAction
6{
7 public:
8 BeginOfEventAction(G4Event* aEvent);
9 EndOfEventAction(G4Event* aEvent);
10 // 引数に G4Event型 を指定しているため
11 // G4Eventクラスが読み込まれていないと
12 // コンパイルエラーになる。
13 // 前方宣言してあるとエラーを回避できる。
14};
ヘッダーファイルをインクルードする代わりにclass クラス名;
と書くことを前方宣言と呼びます。
「こういう名前のクラスがあるよ」ということをあらかじめお知らせすることで、コンパイルエラーを避けることができます。
Geant4では多用されていますが、Googleスタイリングガイドでは、できるかぎり使わないことが推奨されていります。 なので、僕はあまり使わないようにしています。