【C++Primer学習ノート】chapter 6文

2310 ワード

練習問題6.16
2つのvectorの要素を入力するときは特定の値で入力をマークしたり、ファイルの終了記号(ctrl+zを入力)で要素入力の終了を制御したりすることができます.後者の方法を使用する場合は、2番目の入力サイクル銭でストリームcinを有効な状態に戻すことを覚えておいてください.
 
cout<<"      int vector  ivec1    :(ctrl+z to end)"<<endl;
while(cin>>num1) 
  ivec1.push_back(num1);
 fflush(stdin);//         。         
    cin.clear(); // cin       
 cout<<"      int vector  ivec2    :(ctrl+z  to end)"<<endl;
 while(cin>>num2)
  ivec2.push_back(num2);

6.13 tryブロックと異常処理
ヘッダファイルで定義された標準例外クラス
Exceptionで最も一般的な問題
runtime_Errorランタイムエラー:ランタイムのみで検出できる問題
range_Errorランタイムエラー:生成された結果が有意義な値ドメイン範囲を超えています
overflow_error運転時エラー:オーバーフロー計算
underflow_Errorランタイムエラー:アンダーフローの計算
logic_Errorロジックエラー:実行前に検出できる問題
domain_error論理エラー:パラメータの結果値が存在しません
invalid_error論理エラー:不適切なパラメータ
length_errorロジックエラー:このタイプの最大長を超えるオブジェクトを生成しようとしました
out_of_range論理エラー:有効範囲外の値を使用
 
6.14プリプロセッサによるデバッグ
1)NDEBUGを使用した前処理変数
#ifndef NDEBUG
cerr<<""<#endif
デフォルトでは、NDEBUGは定義されていません.これは、#ifndefと#endifの間のコードを実行する必要があることを意味します.
開発の過程で、未定義のNDEBUGを維持してその中のデバッグ文を実行して、開発が完成した後に、NDEBUGを定義することを通じて(通って)、これらのデバッグ文を削除することができます.
2)assertプリプロセッシングマクロ
assert()マクロの使い方
注意:assertは関数ではなくマクロです.Cのassert.hヘッダファイルにあります.
assertマクロのプロトタイプ定義はでは、条件がエラーを返すと、プログラムの実行が終了し、プロトタイプ定義が次のように機能します.
  #include
  void assert( int expression );
assertの役割は、式expressionを先に計算し、値が偽(すなわち0)の場合、stderrにエラー情報を印刷することです.
次にabortを呼び出すことでプログラムの実行を終了します.
 

/* assert example */
#include <stdio.h>
#include <assert.h>

void print_number(int* myInt) {
  assert (myInt!=NULL);
  printf ("%d
",*myInt); } int main () { int a=10; int * b = NULL; int * c = NULL; b=&a; print_number (b); print_number (c); return 0; }

assertを使用する欠点は、頻繁な呼び出しがプログラムのパフォーマンスに大きく影響し、追加のオーバーヘッドが増加することです.デバッグ終了後、#includeの文の前に#define NDEBUGを挿入してassert呼び出しを無効にします.