http://www.mozilla-japan.org/hacking/mozilla-style-guide.html
Mozilla コーディングスタイルガイド
URLはMozillaプロジェクトのものですが、一般的なコーディングでも参考になると思います。
後は...
どれだけ多言語やローカライズを意識したものを作るのか、どれだけ汎用的に作るのか、MFCやATL、WTLを利用するのかなどにもよってきますが、私の場合は
・TCHAR系をきちんと利用する
UnicodeとMBCSできちんとビルドおよび実行が出来るようにする
・CStringなどをわたさない
SetData(CString strData){}のような関数にはせずに
SetData(LPCTSTR lpszData){}のようにTCHAR系でわたす(パフォーマンスアップにもつながります。CStringを介すとコンストラクタなどが呼ばれますから)
・ポインタ渡しはせずに参照渡しにする
ポインタ渡しだと
GetData(CString* pstrData)
{
if(pstrData == NULL)return;
*pstrData = _T(””);
}
のようにポインタのチェックが必要ですが、場合によって忘れてしまうことなどがあるので
GetData(CString& strData)
{ strData = _T(””);}
のようにポインタチェックが不要な参照渡しにしています。
・classにきちんとconstを付ける
class CData
{
bool GetData() const;
};
のように適切なconst宣言をメンバー関数に使う。
・できるだけ汎用的に作る
例えばデータ圧縮関数やスタック、キューなど、どこでも使いそうなものはきちんとクラスにまとめて、再利用が可能に作っています。その際にはcppなどは使わずにWTLのように簡単に利用がかのうなように(ソースは汚くならないように注意を払って).hのみでまとめています。
・pragmaを使う
#pragma comment(lib,”aaa.lib”)
のような嫌われることもある宣言を使って、プロジェクト設定をいじることなく、依存するライブラリを使えるようにしています。そうすると後でプロジェクトを作り直したときにどのlibが必要だったのか悩む必要もないですから。
・リテラル文字列は使わない
CString strData = _T(”あいう”);
のように文字列を直接代入すると、後々ローカライズが大変ですから、
strData.LoadString(IDS_DATA);
のようにリソースから取り込むようにします。
・グローバル変数は”絶対”使わない
子プロセス起動があったときにトラブルの元ですから
・コールバックのstatic関数もすべてclassに入れる
CALLBACKだからと言ってclassの外に出すと、どこで使われているものだか沸け分からなくなりがちですので。
という感じにしています(ほかにも色々ありますが)。
この手のものは集まっているプログラマの技量によってはまったく役に立たなかったりもします。技量のない人のソースは誰かががきちんとチェックやスタイルを統一させるような作業をした方が無難なこともあります。
後は基本的なコーディングとして変数の名前付け規約でしょうか?私は
CString strData;
CStringW ustrData;
CStringArray austrData;(MFCのCStringArrayを利用することはないですが、配列クラスのときはaを付けています)
CMAP<> mapData;
BYTE cbData;
LPBYTE pcbData;
BYTE pcbData[10];
int nData;
CComAutoCriticalSection sec_nData;
という感じにしています。ちなみにメンバー変数の場合は_を付加しています。
マイクロソフトが採用しているコーディングルールだったかと思います。
議論はあると思いますが、メジャーなルールではあります。メジャーであるということは、初めて会う相手も知っている可能性が高いという点でメリットがあります。
�����l�̖���
おすすめのHPです。
参考にされるといいでしょう。
株式会社アスキー
あとはなにか書籍を一冊用意されるといいと思います。
C++のリファレンスマニュアルはCのものに比べて激高なうえ分厚いですが、本格的にプログラミングを始めるなら、用意する必要はあるかもしれません。
ありがとうございます。
ご紹介、ご意見ありがとうございます。