• ベストアンサー

C言語のコーディングチェックリスト

社内教育の一環でC言語の講習を行ないます。 その中でC言語のコーディングを行なう際の 注意点ややるべきでないコーディングスタイルなど コーダーが自己チェックできるチェックシートを 作成して事前に配布しようと思っています。 特にC言語固有のルールなどがあれば 事前に共有しておきたいのですが、 どういったことを盛り込んだらよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

C言語固有ではないのですが、社内の勉強会向けに作った資料から引っ張り出してきました。参考までにどうぞ。 << 機能 >> - 仕様書で規定された機能を満足に実行できるか? - 未実装の機能はないか? - 仕様書に無い機能を実装していないか? << コメント文 >> - 自明なコメントが書かれていないか? - ファイルや関数のヘッダに記入漏れがないか? - 関数や処理の仕様変更によるコメントの修正漏れがないか? - 機能追加によるコメントの修正漏れがないか? - 無責任なコメントが入っていないか? << データ宣言 >> - 全ての変数が宣言されているか? - デフォルトの属性を知っているか? - 配列と文字列に適切な初期値をセットしているか? - 長さ、型、記憶域の種類が正しく与えられているか? - よく似た同じような名前の変数がないか? << データ参照 >> - 値がセットされていない変数を使っていないか? - 添え字の値が限界値内にあるか? - 整数でない添え字を使っていないか? - ポインタを使った参照で、参照された記憶領域は現在割り当てられているか? - 別名を使うときに正しい属性を持つか? - 文字列の限界を超えていないか? - 索引つきまたは添え字操作で1つずれのエラーがないか? << 計算 >> - 数字でない変数の計算は適切か? - 混じったモードの計算は? - 長さの違う変数の計算は? - 代入された値より少ない長さをもつターゲットでは? - 中間結果がオーバーフローまたはアンダーフローしていないか? - 0で割り算していないか? - 意味を成す範囲を超えた変数値は? - 演算子の優先度は明確になっているか? - 整数の割り算の結果は正確か? << 比較演算 >> - 異なるデータ形式(例えば文字列と番地)の比較などしていないか? - 比較演算子を正しく使っているか? - 演算子の優先順位を理解しているか?ブール代数式は意図したとおりに- 表現されているか? - 比較とブール代数表現が混じっていないか? - コンパイラによるブール代数式の解釈方法を理解しているか? << 制御フロー >> - 反復ループは停止するか? - ループでの可能な中断が正しく行われるか? - 1つずれの反復回数エラーは? - 選択肢は全ての場合を考慮できているか? << インターフェース >> - パラメータと引数の属性が一致しているか? - パラメータと引数の単位系が一致しているか? - 組み込み関数への引数の数、属性、順序は正しいか? - 参照しないパラメータを引き渡したりしていないか? - 入力だけの引数が変更されていないか? - 大域変数の定義がモジュール間で一致しているか? << エラー処理 >> - 入力の正当性がチェックされているか? - 入力パラメータ(データ)の取り扱い範囲はすべて考慮されているか? - エラー時の復旧処理は考慮されれているか? << その他 >> - 他人に上手く説明できない「おまじない処理」が含まれていないか? 【 参考文献 】 Glenford J. Myers著、ソフトウェア・テストの技法、近代科学社、1980. 会社にあるソフトウェア開発マニュアルのチェックリストを見たら、ああ、この元ネタは「ソフトウェア・テストの技法」だったのか、と気が付きました。

veracity
質問者

お礼

まさに私が求めていたものの形です。 > Glenford J. Myers著、ソフトウェア・テストの技法、近代科学社、1980 こちらも読ませてもらいます。 どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • u-bot
  • ベストアンサー率58% (1736/2988)
回答No.2

「C言語固有のルール」はあるようでいてかなりいい加減と感じています。 色々な本を読みましたが、独自のルールで書いているものが少ないないです。 少しぐらい邪道な書き方をしてもコンパイラが許してくれるため非常に危ないプログラムを書く人をよく見かけます。 (自分もその一人ですが・・・) とりあえずC言語の古典と呼ばれる本を参考にしてみてはどうでしょうか? http://itpro.nikkeibp.co.jp/members/NSW/ITBASIC/20030324/2/?ST=books

veracity
質問者

お礼

> 非常に危ないプログラムを書く人をよく見かけます。 そうなんですよね、ほんとその通りだと思います。 個人の趣味で作るならそれでもいいんですが、 やはり共同作業で作る場合、方針は決めたいなと 思って悩んでいます。 ご紹介してもらった本は参考にしてみます。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

C言語は、プログラマが間違いをおかさないことが前提となっている言語ですので、「言語仕様を理解しないままコーディングしない」のひとことに尽きます。 あとは現場の都合ですね。

veracity
質問者

お礼

> 「言語仕様を理解しないままコーディングしない」のひとことに尽きます。 そう、それをセルフチェックできるようにしたいんですよね。 人は無意識に間違いをおかすはずなので。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語の通信教育

    現在、SEを目指して転職活動中です。 前職は社内SEでしたが、プログラミングの必要が無かった為、知識も全くありません。 少しでも役に立てば、と思い『新C言語入門ビギナー編』(著:林晴比古)を購入し 勉強はしているのですが、通信教育等で基礎からきちんと学んだ方が良いのかとも思います。 もちろん実務の経験が無いので、それだけで転職活動を有利に進められるとは思ってはおりませが・・・。 実際に通信教育でC言語を学ばれた方がいらっしゃいましたら、オススメの講座等を教えて下さい。

  • C言語のCGIが編集できません

    フリー配布のC言語で書かれたチャットのCGIをダウンロードしたのですが、エディタで開くと テキスト中にNULL文字が含まれています! この文字はメモ帳++で強制的に削除されます。 と警告がでます。そして開くと文字化けをしたようになってしまいます。 そのままの状態でアップロードすると、404エラーが出ます。 別のプログラムでCGIのエラーチェックをすると、 Unrecognized character \x7F at (eval 1) line 1. と出るのですが、さっぱりわかりません・・・。 恥ずかしいのですがC言語の知識が全くないので、C言語についてもアドバイスをいただけるととても嬉しいです。

    • ベストアンサー
    • CGI
  • 今風(?)のコーディング規約が知りたい

    C++ は初心者です。他の言語は結構長くやっております。C は多少経験があります。(が、知識が 10 年くらい前のものです) 趣味で C++ を始めたのですが、仕事や大きなコミュニティ内で使ったことがないために、今現在主流のコーディング規約というかお行儀の良いスタイルの判別が難しいです。ヘッダファイルや Google Codesearch 等で片っ端から色々なソースを見ているのですが結構バラバラなんですよね・・・ 他の言語の経験があるので、switch の最後には何もなくとも default を明確につけとけ みたいなことの有用性はわかるのですが ではなくて、細かいですけど if (hoge) { } なのか if (hoge) { } なのか、とか (自分は下の方が好き) int ←ここで改行する?(自分は改行する) hogeHoge() { ・・・ とか。 多分僕の個人的な好みは大昔にやった C (K&R スタイル?) や長く仕事で使っている Perl の影響が強い気がするので、C++ 的にはどうなのかなと。 変数名や関数名は GNU スタイルなのか キャメルスタイルなのか、キャメルスタイルだったら大文字から始めるのか、関数名だけ大文字から始める人もいれば、関数名も小文字からの人もいるし、enum の定数は全部大文字が普通?とか(きりないですorz)・・・ ハンガリアンはもう推奨されてないというのは理解してます。その理由もなんとなく。でもハンドルは hHoge にするのが普通みたいですし、bool型なら is~ とか can~ とか。人によってはグローバル変数にもプレフィックスつけるようですね。他にもそういうこれはプレフィックスつけるのが普通!ってのがあったら知りたいです。僕自身はめっちゃ長くなっても意味が正確にわかる変数名をつけとけ派なので、プレフィックスにはあまり必要性を感じないです。(英文みたいな変数名とか良くやる) でも、 C++ 長くやると多分考え方が変わるかなあと思うので。 とりあえず以下を読んでますが、それほど間違った選択はしていないでしょうか? http://sec.ipa.go.jp/download/dl.php?filename=report/200606/CMGuide_V1-0.pdf http://www.possibility.com/Cpp/CppCodingStandard.html それはもう古い、今はこういう感じが普通、というのがあったら教えていただけると幸いです。(英語でも構いません) 個人で趣味レベルでやるなら、その程度は好きにしてかまわんでしょう、という意見でも OK です。好きにするんでも一貫したいので、どうせなら良いものを参考にしておきたいとは思ってます。(目的のモノを動かすのに数時間もかからなかったのに、そのコードをお行儀よく書き直そうとして数日も定まらずに何度も書き直したり・・・な状態なので。)

  • 「ストレスチェック」プログラムの中身と言語について

    よろしくお願い致します。 タイトルの通り、最近はじまった「ストレスチェック」で、厚生労働省が配布している無料の「ストレスチェックプログラム」ですが、これはどのようなプログラムなのでしょうか。 □厚生労働省版ストレスチェック実施プログラム https://stresscheck.mhlw.go.jp ・いわゆる、C言語というもので作成されているのでしょうか。 ・どれ程の知識があれば「ストレスチェックプログラム」のようなツールが作れるでしょうか。 よろしくお願い致します。

  • ボーランド、ビジュアルCでプログラムを作成、配布しますが、配布先の人た

    ボーランド、ビジュアルCでプログラムを作成、配布しますが、配布先の人たちが素人なので、DLLのセッティング等をしないでも使える様にしたいのですが、どうしたら良いでしょうか。 共有RTL DLLを使うに にはチェックを入れていませんが、実行時にDLLが見つからないとのメッセージが出てしまいます。 ビジュアルC関連のDLLは見つからないとは出て来ないので、ビジュアルC関連のDLLは.exeに含まれている様ですが、画像ライブラリー(MIL)関連のDLLを要求して来ます。 宜しくお願い致します。

  • vimで違う拡張子のファイルをタグリスト機能を有効にする方法

     vimとctagsを使用しています。  C言語でコーディングしている時は、ctagsで生成したtagsでタグリスト(:Tlist)を使用しているのですが、拡張子が一般的なC言語の拡張子(c/h/cpp/c++など)ではない場合も、C言語と同じルールでタグリストを表示させたいのですが、できません。  タグの生成は"ctags --languace-force=C++"でできているようですが、vim側がそのタグを見に行っていないように見えます。  関係ない拡張子でも、C言語のルールでタグリストを表示させる方法があれば、教えていただけませんでしょうか? 環境は以下のとおりです。  solaris7+vim6.3+ctags(たぶん最新版)  windowsXP+cygwim+vim6.4+ctags(たぶん最新版)

  • Word2007のスタイルセット設定で困っています!

    Word2007で(言語は日本語)で文書作成後、<ホームタブ-スタイルグループ-スタイル変更-スタイルセット>を使用設定すると、言語が自動的に英語(米国)に変わってしまいます。 何か設定上の問題があるのでしょうか? もちろん、Wordのオプションの言語設定は日本語となっています。 コンパネの言語設定も日本語です。 Word2007の講習でアウトラインを教えている最中にこの現象が現われました。 スペルチェックが入り、赤の波線だらけになってしまいます。 説明方法に困っています。よろしくお願いします。

  • C++Builderプログラム開始エラー

    C++Builder6で作成した実行ファイルとdllファイル)とを別のWindows上で動作させようとするとエラーが出ます。共有RTLDLLを使う、実行時パッケージを使って構築の両方に関して、チェックを入れたりはずしたりしていますが、解決しません。 エラーの表示は、「!プログラム開始エラー」のみです。特に、何が配布漏れなのかを知る手段を教えてください。

  • QR法について

    QR法により,固有値を求めるプログラムを作っています. QR法でqjを求めるときに,rjjの逆数が必要ですが,rjj=0になったとき,うまく求めることができません. このような場合に,どうしたら解決できますか? ちなみに言語はC言語ですが,解決法さえいただければ自力で組むつもりです.「教育」の「数学」のカテゴリか迷いましたが・・・・

  • C言語についての英文を訳してください

    以下は、Linux Kernel のコーディングスタイルについての英文です。 C言語の中括弧の位置について述べています。 一番最後の段落、 Heretic から後の訳を教えてください。 (それより前の段落はわかるので、訳いらないです。) とくに _right_ がよくわからないです。 前後にアンダースコアをつけて、何を言おうとしているのか、さっぱり。 よろしくおねがいします。 The other issue that always comes up in C styling is the placement of braces. Unlike the indent size, there are few technical reasons to choose one placement strategy over the other, but the preferred way, as shown to us by the prophets Kernighan and Ritchie, is to put the opening brace last on the line, and put the closing brace first, thusly: if (x is true) { we do y } This applies to all non-function statement blocks (if, switch, for, while, do). E.g.: switch (action) { case KOBJ_ADD: return "add"; case KOBJ_REMOVE: return "remove"; case KOBJ_CHANGE: return "change"; default: return NULL; } However, there is one special case, namely functions: they have the opening brace at the beginning of the next line, thus: int function(int x) { body of function } Heretic people all over the world have claimed that this inconsistency is ... well ... inconsistent, but all right-thinking people know that (a) K&R are _right_ and (b) K&R are right. Besides, functions are special anyway (you can't nest them in C).

このQ&Aのポイント
  • 見積書の電子保存について質問します。見積書のファイル名として適切な形式は何でしょうか?
  • 価格変更に関する文章を保存する必要があるかどうか、また適切なファイル名は何ですか?
  • 価格変更の済ませ方によって保存する文章の内容が異なる場合、どのように対応すればよいでしょうか?
回答を見る