C++(四)文の再学習


第六章文
1.不正に見えるセミコロンは、空の文にすぎません.
ival = v1 = v2;; //ok

上には2つの文があります.1つの式文と1つの空の文です.
2.switch構造の場合、break文の書き落としはよくあるエラーです.
3.switch解の式は非常に複雑であり、case符号は整数定数式でなければならない.
//     
case 3.14; //   
case ival; //   

4.最後のcaseタグまたはdefaultタグの後にのみ変数を定義できます.コードが変数の定義と初期化をスキップしないようにします.
5.do while文は常にセミコロンで終了し、do内部で定義された変数の役割ドメインはwhile前の右かっこの前に制限される.
do
    statement
while (condition);

6.break文は、最近のwhile,do while,for,switch文を終了するために使用されます.
7.ラベル識別子はgotoのターゲットとしてしか使用できないため、変数名などと重複してもよいが、他のラベル識別子と重複してはならない.goto文と転送された制御権を取得するラベル付き文は、同じ関数内にある必要があります.goto文は変数定義にまたがってジャンプできません(必要に応じて定義をブロック文に配置できます).
8.tryブロックでは、catch句の実行が終了すると、プログラムフローは直ちに最後のcatch句に続く文を実行し続ける.
9.プリプロセッサによるデバッグ:
int main()
{
#ifndef NDEBUG
cerr<<"starting main"<<endl;
#endif
// ..
}

NDEBUGが定義されていない場合、cerrに情報を書き込む.定義されている場合は、セグメントコードをスキップします.
したがって、開発段階では、NDEBUGが定義されていないことを維持することができ、リリース段階では、NDEBUGを定義することによって、これらのデバッグ文を削除することができる.
$ cc -DNDEBUG main.c

上の文はmainに等しい.c先頭に#define NDEBUGを追加する;
assert(断言)前処理マクロ:NDEBUGが定義されていない限り、assertマクロはその後の条件式を解き、結果がfalseの場合、情報を出力してプログラムを終了する.
通常assertを使用して「起こり得ない」条件をテストします.