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スタイリングガイドでは、できるかぎり使わないことが推奨されていります。 なので、僕はあまり使わないようにしています。