C++に関する話題を自分用にメモ。
コーディング基準(整理後、別ページにする予定。)
基本ルール
- クラス名/メソッド名/関数名/変数名は略さない。(適切な名称で。)
- インデントはスペース4文字。(タブは使用しない。)
- Javaスタイル
ファイル名は、「.cpp/.h」とする。
基本的に1クラス=1ファイルとする。
main関数は1ファイルとし、ファイル名の末尾はMain.cppとする。
変数の宣言は1行1変数とする。カンマで区切って複数宣言しない。
演算子やカンマ、イコールの前後は空白を入れる。
int value = 1 + 2;
コメントは基本的に上に記述。
// OK
int value = 1 + 2;
行の末尾に付与するコメントは禁止。
int value = 1 + 2; // NG
クラスやメソッドのコメントはdoxygen形式で。
/**
* 関数の説明
* @param a 引数A
* @param b 引数B
* @return 戻り値
*/
int execute(int a, int b) {
// ...
}
/* */形式のコメントは、ファイル先頭のコピーライト程度に使用するのみで、
基本的に使用しない。
処理をコメントアウトする場合には、行頭に//を加える。
// int execute(int a, int b) {
// // ...
// }
関数でも { の位置は行末で。
int execute(int a, int b) {
// ...
}
if,for,whileでは1行の処理でも必ず{}を付ける。
if文
// if/else全体についてのコメント
if (condition1) {
// condition1で実行する処理についてのコメント
処理
} else if (condition2) (
// condition2で実行する処理についてのコメント
処理
} else {
// elseで実行する処理についてのコメント
処理
}
for文
for (int i = 0; i < size; i++) {
// ...
}
while文
while (boolValue) {
// ...
}
switch文
case ...:で必ず改行する。
// switch文全体に関するコメント
switch (value) {
case CASE_A:
// CASE_Aで処理する内容のコメント
break;
case CASE_B:
// CASE_Bで処理する内容のコメント
break;
case CASE_C:
// breakしない場合、「FALLTHROUGH」の記述は必須。
// FALLTHROUGH
case CASE_D:
// CASE_C, CASE_Dで処理する内容のコメント
break;
default:
break;
}
class Foo {
private:
// メンバ変数は先頭に「m_」を付与する。
int m_value;
protected:
// ...
public:
// ...
};
グローバル変数には先頭に「g_」を付与する。
(ただしグローバル変数は基本的に使用しないこと。)
ポインタには末尾に「_p」を付与する。
(ただし文字列(char*)なんかは、_pをつけなくてもよい。)
例外は、std::exceptionを継承したクラスを作成する。
末尾はExceptionとする。
try {
} catch (XxxException& eXxx) {
}
using句は、クラス単位で。「using namespace xxx;」とはしない。
using std::cout;
using std::endl;
ヘッダファイル形式
#ifndef NAMESPACE_CLASS_NAME_H
#define NAMESPACE_CLASS_NAME_H
#endif
long型は使用しない。int64_tやint32_tを使用する。
(boost/cstdint.hpp)
g++の場合「-Wall」は必須。
valgrind
autotools
STL,boost,Log4cxx,ICU,ACE,CppUnitについて。
現在の安定バージョンである0.9.7は、ログの時刻がGMTで出力されるなど使い勝手がよくない。
で、いろいろ調べてみてみると、もう0.10.0が準備されている模様。
CppUnit
cocuppa,coumaについて
最終更新:2007年06月30日 14:23