個人財務 C ++でバグを避ける10の方法 - ダミー

C ++でバグを避ける10の方法 - ダミー

目次:

ビデオ: 【フォートナイト】ストームキングにハメ技使ったらまさかの結果に!! 2025

ビデオ: 【フォートナイト】ストームキングにハメ技使ったらまさかの結果に!! 2025
Anonim

最初にC ++プログラムを実際に書くのに費やす時間より多くの時間を費やしてバグを取り除くことは残念です。ここでの提案は、プログラミングをより楽しいものにするために、プログラムに導入するエラーの数を最小限に抑えるのに役立ちます。

すべての警告とエラーメッセージを有効にする

C ++の構文では、多くのエラーチェックが可能です。コンパイラが解読できない構造に遭遇すると、メッセージを出力するだけでは選択肢がありません。ソースコードとバックアップを同期しようとしますが(時には成功しない場合もあります)、実行可能ファイルは生成されません。これにより、プログラマーはすべてのエラーメッセージを修正するようになります。

<!しかし、C ++がわかる構造体があるにもかかわらず、構造体が怪しげになると、C ++は警告メッセージを生成します。 C ++はあなたが望むものを理解していると確信しているので、実行可能ファイルを作成して、好きなときに警告を無視することができます。実際に、気にしたくない場合は、警告を無効にすることができます。

警告を無効にするか無視することは、非常に悪い考えです。それはあなたを悩ませるので、あなたの車のダッシュボードにある "チェックエンジン"のライトを抜くようなものです。問題を無視してもそれは消えない。

<! C ++コードを明快で一貫したスタイルで書くことは、プログラムの可読性を向上させるだけでなく、コーディングミスを減らすことにもつながります。このやや驚くべき事態は、私たちの脳は限られた量の計算能力しか持たないという事実に起因します。

あなたが慣れ親しんだスタイルに従っているきれいできちんとしたコードを読むと、C ++ステートメントのシンタックスをパースする脳力をほとんど消費しません。これにより、プログラムが何をやろうとしているのかを解読するために、より多くの脳のCPU能力が残されます。

<!

クラス名、オブジェクト名、および関数名を区別する

クラス、関数、またはオブジェクトがどのような目的で使用されているかを理解する

C ++コードからプリプロセッサシンボルを区別する(つまり、#defineオブジェクトが目立つようにする)

同じレベルのC ++コードのブロックを識別する(これは一貫したインデントの結果である)

  • さらに、各モジュールの関数またはクラス、作成者、日付、バージョン、および変更履歴に関する情報を提供するモジュールヘッダーの標準形式を確立する必要があります。

  • 単一のプロジェクトに関わるすべてのプログラマーは、同じコーディングスタイルを使用する必要があります。さまざまなコーディングスタイルのパッチワークで書かれたプログラムは混乱しており、プロフェッショナルではありません。

  • コードの記述中にコメントを書く

  • すべてのコードが動作するまで待ってからコメントを追加するだけでなく、コードを記述しているときにコメントを書くとエラーを回避できます。

コメントを定式化することで、あなたがしようとしていることを考慮する必要があります。短いコメントは、後で読むときと書くときの両方で啓発されます。あたかも他の有能なプログラマーと話しているかのようにコメントを書く。

デバッガ内のすべてのパスを少なくとも1回シングルステップ

プログラマは、プログラムが何をしているのかを理解する必要があります。プログラムが期待値を出力するだけでは不十分です。あなたはあなたのプログラムがやっていること全てを理解する必要があります。フードの中で起こっていることは、プログラムをシングルステッピング

するよりも、デバッガ(Code::Blocksに付属しているようなもの)を使って段階的に実行しているよりも、良い感じはありません。それ以外にも、プログラムをデバッグするときには、プログラムが実行されるときに起きるかもしれないいくつかの奇妙な動作を理解するために、素材が必要です。サービスに入るたびに、各機能を1ステップずつ進める以上に、その材料をあなたに提供するものはありません。最後に、関数が終了してプログラムに追加する準備ができたら、すべての論理パスを少なくとも1回は移動させる必要があります。バグは、関数の残りの部分と一緒にポットに投げ込まれた後ではなく、それ自身で関数を調べると、はるかに簡単に見つけられます。新しいプログラミングの課題にあなたの注意が向けられています。

可視性を制限する

クラス内部の可視性を外部に限定することは、オブジェクト指向プログラミングの基礎です。クラスは内部状態を担当する必要があります。何かがクラスに陥った場合、クラスのプログラマーの責任です。アプリケーションプログラマは、問題の解決を心配する必要があります。

具体的には、可視性が限られているということは、データメンバがクラス外にアクセスできないようにすることです。つまり、保護されているとマークする必要があります。さらに、アプリケーションソフトウェアが知る必要がないメンバー機能には、保護されているとマークする必要があります。仕事を遂行するために必要以上にクラス内部を公開しないでください。 ヒープメモリの追跡 ヒープメモリの損失トラックは、現場にリリースされたプログラムの致命的なエラーの最も一般的な原因です。同時に、追跡して削除するのが最も難しい問題です。 (このクラスのエラーは検出して削除するのが非常に難しいので、購入したプログラムでは流行しています。)問題が発生する前に数時間プログラムを実行しなければならない場合があります。

一般的なルールとして、プログラマは常に同じレベルでヒープメモリを割り当て、解放する必要があります。メンバ関数MyClass:: create()がヒープメモリのブロックを割り当てて呼び出し側に返す場合、ヒープに返すメンバMyClass:: release()が存在するはずです。具体的には、MyClass:: create()は、親関数がメモリを解放する必要はありません。

可能であれば、MyClassはそのようなメモリポインタを独自に追跡し、デストラクタでそれらを削除する必要があります。

ポインターを削除した後にポインタをゼロにします。

ポインターが有効でなくなった後にポインタをゼロにします。それらにnullptrの値を代入することによって行います。このアクションの理由は、経験の浅いほど明らかになります。ヒープに戻ってきたメモリブロックを引き続き使用できます。プログラムは99%の時間で正常に動作するため、ブロックが再割り当てされてプログラムが機能しないケースの1%を見つけることが非常に困難になります。

有効でなくなったポインタをヌルにして値を格納しようとすると(ヌル位置またはその近くに何も格納することはできません)、プログラムはすぐにクラッシュします。クラッシュすると音が悪くなりますが、問題が発生した場合はそうではありません。問題はそこにあります。それは生産に入れる前にそれを見つけるかどうかの問題に過ぎません。

例外を使用してエラーを処理する

C ++の例外メカニズムは、エラーを便利かつ効率的に処理するように設計されています。一般に、エラーフラグを返すのではなく、エラーインジケータをスローする必要があります。結果として得られるコードは、書き込み、読み込み、および保守が容易です。他にも、他のプログラマーも期待していて、失望したくないのではないでしょうか?

あなたの例外の使用を真のエラーに制限します。これがその関数の日常生活の一部である場合、 "did not work"インジケータを返す関数から例外をスローする必要はありません。

デストラクタを仮想宣言する

コンストラクタがオブジェクトが最終的に終了するときに返される必要があるヒープメモリなどのリソースを割り当てる場合、クラスのデストラクタを作成することを忘れないでください。デストラクタを作成したら、それを仮想化することを忘れないでください。

"しかし、"私のクラスは何かを継承せず、別のクラスに継承されていません。 "はい、それは将来の基本クラスになる可能性があります

。デストラクタ仮想を宣言しないという正当な理由がない限り、最初にクラスを作成するときに行います。

コピーコンストラクタとオーバーロードされた代入演算子を提供します。

クラスにデストラクタが必要な場合は、ほとんどの場合、コピーコンストラクタとオーバーロードされた代入演算子が必要です。コンストラクタがヒープメモリなどのリソースを割り当てる場合、デフォルトのコピーコンストラクタと代入演算子は、同じリソースへの複数のポインタを生成することによって混乱を招くだけです。

これらのオブジェクトのいずれかのデストラクタが呼び出されると、資産を復元します。他のコピーのデストラクタが来たら、それは物事を台無しにするでしょう。

C ++でバグを避ける10の方法 - ダミー

エディタの選択

IOSアプリケーション開発の既存クラスにメソッドを追加する方法 - ダミー

IOSアプリケーション開発の既存クラスにメソッドを追加する方法 - ダミー

Objective-Cでは、作成していないクラスであっても、iOSアプリケーションの既存のクラスに独自のメソッドを追加できます。クラスにメソッドを追加することは、特定の状況でのみ新しい動作が使用される場合に便利です。たとえば、特定のアプリケーション...

IOSアプリケーション開発の既存クラスにメソッドを追加する方法 - ダミー

IOSアプリケーション開発の既存クラスにメソッドを追加する方法 - ダミー

IOSアプリケーションの開発では、Objective-Cを使用すると、自分が作成していないクラスであっても、既存のクラスに独自のメソッドを追加することができます。クラスにメソッドを追加することは、特定の状況でのみ新しい動作が使用される場合に便利です。たとえば、特定のアプリケーション(たとえば、...

In App Purchase機能がiPadアプリで動作する仕組み

In App Purchase機能がiPadアプリで動作する仕組み

Apple App App Purchase機能を提供します。これにより、アプリユーザーはアプリ内から仮想アイテムを直接購入することができます。複数のレベルや環境、または仮想プロパティを持つゲームアプリケーションを開発する場合は、アプリケーションにIn App Purchase機能を追加して、レベル、環境、またはプロパティをさらに販売することを検討してください。 App Purchaseで...

エディタの選択

効果的なホームビジネスWebサイトを作成する方法 - ダミー

効果的なホームビジネスWebサイトを作成する方法 - ダミー

素晴らしいかもしれませんが、製品やサービスをさらに販売するのに役立たない場合は、時間とお金の無駄です。自宅のビジネスにとって本物の資産であるWebサイトを構築するための、実証済みの方法をいくつか試してみましょう。難しいことではありません...

マスターCSSファイルを作成する方法 - ダミー

マスターCSSファイルを作成する方法 - ダミー

多くのデザイナーがマスターHTMLコードのCSSファイルを作成し、個々のサイトのニーズに合わせて、最初からウェブサイトを構築するプロセスをスピードアップします。あなたがより多くのウェブサイトを構築するにつれて、いくつかのスタイルは標準的なデザインプラクティスの標準的な部分になります。 ...

MSN adCenterのウェブマーケティングキャンペーンのアカウントを作成する方法 - ダミー

MSN adCenterのウェブマーケティングキャンペーンのアカウントを作成する方法 - ダミー

Bing検索結果と並んでクリック単価(PPC)広告はMSN adCenterを通じて提供されます。 adCenterを使用して、Webマーケティングのニーズに合わせてアカウントとキャンペーンを作成できます。 Microsoftは、Bing Travel、adCenter Desktopなどのプログラムを追加することで、PPCサービスのインターフェース、ツール、検索品質、およびボリュームを向上させるために歩み続けています。...

エディタの選択

地中海ダイエットレシピ:フルーツサラダ - ダミー

地中海ダイエットレシピ:フルーツサラダ - ダミー

果実は地中海で豊富に生育し、地中海沿岸に沿って、アメリカ人より一般的に果実を多く食べるため、地中海の高レベルの疾病予防に貢献しています。あなたの次の食事やパーティーのために健康的なサイドディッシュのフルーツサラダを作るには、いくつかの方法があります。果物は地中海で豊富に生育し、地中海沿岸に住む人々は一般にアメリカ人よりも多くの果実を食べるため、地中海の高レベルの疾病予防に寄与します。

地中海料理ダイスレシピ:クラシックジャイロとピタ - ダミー

地中海料理ダイスレシピ:クラシックジャイロとピタ - ダミー

ジャイロとピタサンドイッチは一般的なカジュアルな食品です地中海でピザや他の地中海のサンドイッチと同じように、今日はピタサンドイッチとジャイロのさまざまなバージョンが存在します。ピタスは蒸気で作られた中央のポーチ付きの丸いパンです。