今までに皆さんが体験されたことのある記憶に残るコーディング規約を教えていただきたいです。
これはお勧めとか、こんな酷い規約があった、自分専用ルール等、否定は無しで軽い気持ちで教えていただきたいです。
私の記憶に残る規約は下記があります。
[意外と良いかもと思ったもの]
・一文字のループカウンタの使用の禁止
少しでも検索を楽にしましょうと理由でした。
×:for(i=0; i<10; i++){
○:for(ii=0; ii<10; ii++){
[勘弁して欲しかったもの]
・if(2==ii)のように条件文を通常とは逆に書く。
==の比較をタイプミスで=とした時にコンパイルが通らなくするためにらしいです。慣れるまで相当時間がかかりました。
・3項演算子の使用禁止
読めなくて、理解もしなくてその前後のコードを修正する人が居て、使用禁止になったようです。。。
[自分専用規約]
・自分にごめんなさいと言うまで動的なメモリ確保はしない。
リーク対策です。動的にメモリを確保しないと実装できない場合や無駄にメモリを使用しすぎる場合にだけ、自分にごめんなさいをしました。
泣く泣く動的にとる場合はmallocではなくcallocを必ず使うようにしてました。
・極力関数化
if文やswitch文が長くなる場合は、それを条件判断関数としてわざわざ関数を作る努力をします。
普通の処理も一連の流れなら必ず関数化します。
コードの可視性が上がりましたし、デバッグが楽になりました。
(ある関数をデバッグする場合、大半が関数化しているので戻り値だけチェックすればいいので)
でも、関数1から関数2に飛んで、さらにその関数2から関数3に飛ぶ等全ての関数を追えば関数1に戻ってきた時に関数1の内容を忘れるような深すぎるのは禁止にしてました。
また関数名も相当こだわってました。
実はコメントを和英併記してくれと言われた時にコメント量を少なくする為にやってたのが癖になったのは内緒です。
・無駄コメントの削除とconstの推奨
×
int result = 0;
result=NanikanoKansuu();
//NankanoKansuuが正常に処理したら
if(result==0){
○
int result = 0;
const int normalProcess = 0;
result=NanikanoKansuu();
if(result==normalProcess ){
×のコメントを書くのはどうも抵抗がありました。戻り値なんてメンテなどでソースを追う際に読めばわかるやん!って思ってしまって。。。
それにアプリケーションの歴史が長く、メンテに次ぐメンテでコメントが良く間違ってるソースに当たり、コメントをあまり信用しなくなりました。
[微妙だと思った規約]
・プリフィックスの使用
仕様変更に伴いデータ型を変更する際に絶対に変数名の置換を忘れる!と確信できるメンバーがいる時に思いました。
考えればどんどん出てきそうですが、これくらいにしておきます。
見直すとレベルの低い発想が多いですね。ちょっと恥ずかしいです。
No.2ベストアンサー
- 回答日時:
[意外と良いかもと思ったもの]
(1)bool型同士の比較について
falseは大概のコンパイラ・処理系において0だが、trueは0x01や0xffの可能性があるため、各コンパイラで作成したライブラリを結合した場合でも問題なく条件を判断出来るようにするため、必ずfalseと比較するようにする。
(「trueと等しいか」ではなく、「falseと違うか」)
(「trueと違うか」ではなく、「falseと同じか」)
(2)変数名の記述(ハンガリアン文字)について
変数名の頭に型を識別できる識別しをつける「ハンガリアン文字」について、非賛成の記述をされているホームーページがありました。
私もそれを見たときに同感しました。
理由としては、その型で格納できる値の範囲を超えてしまったときに、イチイチ置換する必要があるためです。
教えていだたきありがとうございます。
>(1)bool型同士の比較について
知りませんでした。
非常に勉強になりました。ありがとうございます。
>(2)変数名の記述(ハンガリアン文字)について
非常に恥ずかしいです。
質問の最後のプリフィックス→ハンガリアンに訂正させていただきます。
オーバフローしてたみたいです。。。
もちろん激しく同意です。
気になってたのですが、この質問はアンケートにも該当しそうで、規約違反になりそうなので1回〆ます。
No.1
- 回答日時:
以前、こういう書き方をどこかで「習ってきた」方がいました。
if(a==b){
}else{
式;
}
「true」側は何も記載されていません。
最後まで納得できませんでした…。
(なぜ、(a!=b)に出来ないのだろう?)
情報ありがとうございます!
きっとそのコードを書かれた方はコンパイラが嫌いなんですよ!
一人きりの時にif(a!=b){式;}って書いた時との実行ファイルのデータを比較してるはずです!
嘘です。。。私もそのコードは納得できません。
人のコードは納得できない私は、過去に似たようなコードを書いた事があります。。。
ret=pollingFunk();//ポーリング系の関数
if(ret){
//上手く行ってるので何もしないよ~
}
else{
//リトライ処理
式;
}
if文の中で何も処理してない点は一緒ですね。
でもコメンだけちゃんと書いてるんです!
正常系を拡張したかったらここに処理を入れてねというメッセージです。いや愛です!
すいません。言い訳しました。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++ で、「)」が必要 というエ...
-
graph.hがincludeできない
-
C++でアボート(Abort)で処理が...
-
sprintfを用いたフォーマット文...
-
変数(関数)名の頭に_
-
コンパイルできない
-
プリコンパイラとは?
-
io.hをincludeするとそのような...
-
Visual C++では問題があるのにg...
-
【エラー】Cpadで初めてコンパイル
-
C言語のコンパイラ
-
isnanの取り扱いについて
-
ABAQUS ユーザーサブルーチン...
-
コンパイラの制限 : ヒープの領...
-
関数の戻り値による変数の初期化
-
C言語
-
コンパイラについて
-
fortranでのNaNについて
-
COBOLのEVALUATE文について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++でアボート(Abort)で処理が...
-
変数(関数)名の頭に_
-
C++ で、「)」が必要 というエ...
-
io.hをincludeするとそのような...
-
C言語のワーニングメッセージの...
-
Eclipseの環境設定について
-
ABAQUS ユーザーサブルーチン...
-
Visual C++とVisual C++.NETの違い
-
コンパイルできない
-
volatile修飾について
-
コンパイラについて
-
コンパイラフラグ(compiler fla...
-
Delphiの逆コンパイル
-
fortranでのNaNについて
-
cobolの文法チェックソフト
-
不要なインクルードファイルの検出
-
__extension__
-
IPアドレス表示プログラム
-
isnanの取り扱いについて
おすすめ情報