プログラミング作法 プログラミング作法と デバッグ z 字下げ(インデント) z 注釈(コメント) 初心者 z 名前のつけ方 z モジュラー化 ― VC++ 編 ― z 非対話化 – フィルタ(リダイレクト、パイプ) – コマンドラインオプション 中級者 z 配列の動的確保 字下げ(インデント) 注釈(コメント) z 対等な関係にある文は同じ桁位置に z z 制御文(if文, z case文, while文, do文, for 文)の内部の単文は字下げ(2文字分) z { と } の内部も字下げ(2文字分) z Tabキーは使わない(タブ数=8に) z z 日本語(または英語)でわかりやすく プログラムや関数のはじめに – 目的、内容、参考文献 – 前提条件、制限事項 – 作成日時、作成者 z オートインデントは使わない – 他のエディタでの印刷時に不揃いの可能性 // は一行コメントに /* … */ は複数行コメントに → 無効化 z プログラムや関数の最後に – //プログラム名、//関数名 z 「今日の自分は、明日の他人」 名前のつけ方 z 役割を反映する簡潔な名前をつける 名前のつけ方(その2) z – ユーザ定義定数は大文字で始める Pi, Epsilon – ユーザ定義データ型は大文字で始める Point, Vector z ローマ字は避け、英語にする z 広範囲に使う名前は長く、局所で使う名 前は短く z 長い名前を短くする方法 – 最初の数個の文字 int, str, info, sci, com – 母音を省略 msg, ctrl, cnt, chg, ltd デバッグのコツ 大文字と小文字をうまく使い分ける – 汎用変数は小文字で始める z 2つ以上の単語の区切りは明確化 – threeWordName z 型によって使う文字を決める – 整数型の添え字は i, j, k,… – 整数型の定数は N, M, L を含める MaxN – 状態(論理変数)はis+大文字始まり isEven, isPrime コンパイラ・メッセージ z コンパイラ・メッセージの利用 z コンパイル情報 z ランタイム・エラーとその原因 z ファイル名(行, z よくやるミス z 見つけにくいバグ 桁): メッセージコード: 内容 – error: エラー – warning: 警告 z コンパイル結果情報 – /out:???.exe: 実行形式ファイル – ???.obj: オブジェクトファイル ランタイム・エラー 頻度の高いエラー・メッセージ z 以下のエラーの意味をよく理解しておく – – – – – – – 構文エラー 定義されていない識別子です。 文字 ‘0x81’ は認識できません。 再定義されています。 関数には戻り値が必要です。 実引数が少なすぎます。 互換性のない型が含まれています。 z 制限オーバー – 0で除算、負の平方根・対数 – オーバーフロー、アンダーフロー z スタック・オーバーフロー – 再帰的定義など z ハングアップ → [Ctrl-c] で強制終了 – 無限ループなど z 対策: 途中経過を報告させる – どこまで正常に終わったかを出力 – あやしい変数の値を出力 よくやるミス z スペルミス z 変数の宣言忘れ z カッコのとじ忘れ z セミコロンのつけ忘れ z 文字列のシングルクォートとコンマ z 予約語、宣言済み名前との競合 z ソースファイル名の異常 z コンパイル時の自動保存による失敗 見つけにくいバグ z セミコロン while (式); 文; z 2バイト(全角)文字の混入 – スペース(空白) – コンマ、カッコ、; 、: 、’ … z コメントの入れ子 – /* /* */ */ → /* // */ 字下げとフォントの設定 z devenv(Visual Studio のエディタ)において「ツール」→ 「オプション」→「テキストエディタ」→「C/C++」で「タブサ イズ」、「インデントサイズ」をおのおの4にセットし、「空 白の挿入」欄をチェックする。 Tabキーを時々、使いながらプログラムソースを入力。 z ファイル名を ???.c として保存する。 z Word(Notepad)で表示(印刷)してインデントの乱れが ないか、確認する。 Wordの場合はMS ゴシックなどの等幅フォントを指定 する。MS PゴシックなどPがつくフォントにはしないこと。 z z z デバッグの練習1 /* while の無限ループの練習 */ int main(void) { int a; printf("整数を入力 > "); scanf("%d", &a); while (a > 0); { a = a - 1; printf("%4d¥n", a); } } // while.c 欧文フォントでは Courier New を用いるとよい。 デバッグの練習2 /* ランタイム・エラーの練習 */ #include <stdio.h> #define PI 3.141592 int main(void) { double x; x = sqrt(PI); printf("sqrt(PI) = %f¥n", x); x = sqrt(-PI); printf("sqrt(-PI) = %f¥n", x); } // sqrt.c オプション問題 以下のプログラムを実行し、整数を入力したら、途中 停止せずに終わってしまった。どこを直せばよいか。 /* 途中停止の練習 */ int main(void) { int i; char c; printf("整数を入力 > "); scanf("%d", &i); printf("i = %d¥n", i); printf("リターンキーを押してください."); c = getchar(); }
© Copyright 2024 Paperzz