高品質C/C++プログラミングガイド--式と基本文

4295 ワード

このシリーズの文章は実際に《高品質のプログラムの設計の手引き--C+/C言語》の重点の要約に対して総括します
この記事では、式と基本文をまとめます.
演算子の優先度:
優先度
演算子
名前または意味
使用方法
結合方向
説明
1
[]
配列の下付き
配列名[定数式]
左から右
 
()
かっこ
(式)/関数名(パラメータテーブル)
 
.
メンバー選択(オブジェクト)
オブジェクトメンバー名
 
->
メンバー選択(ポインタ)
オブジェクトポインタ->メンバー名
 
2
-
マイナス記号演算子
-式
右から左
単項演算子
(タイプ)
強制型変換
(データ型)式
 
++
じこぞうふくえんざんし
++変数名/変数名++
単項演算子
--
自己減算演算子
--変数名/変数名--
単項演算子
*
値演算子
*ポインタ変数
単項演算子
&
アドレス演算子
&変数名
単項演算子
!
論理非演算子
!式#シキ#
単項演算子
~
ビット単位逆演算子
~式
単項演算子
sizeof
長さ演算子
sizeof(式)
 
3
/
を除いて
式/式
左から右
両目演算子
*
乗ずる
式*式
両目演算子
%
ざんさ
整数表現/整数表現
両目演算子
4
+
プラス
式+式
左から右
両目演算子
-
減らす
式→式
両目演算子
5
<<
左に移動
変数<<式
左から右
両目演算子
>>
右に移動
変数>>式
両目演算子
6
>
より大きい
エクスプレッション>エクスプレッション(Expression>Expression)
左から右
両目演算子
>=
以上
エクスプレッション>=エクスプレッション
両目演算子
<
より小さい
式<式
両目演算子
<=
以下
式<=式
両目演算子
7
==
に等しい
式==式
左から右
両目演算子
!=
等しくない
式!=式#シキ#
両目演算子
8
&
ビットと
式&式
左から右
両目演算子
9
^
ビット別異動
式^式
左から右
両目演算子
10
|
ビット単位または
式|式
左から右
両目演算子
11
&&
ロジックと
式&&式
左から右
両目演算子
12
||
論理または
式||式
左から右
両目演算子
13
?:
条件演算子
式1?式2:式3
右から左
さんこうえんざんし
14
=
代入演算子
変数=式
右から左
 
/=
除後賦課
変数/=式
 
*=
乗後賦課
変数*=式
 
%=
型取り後付与
変数%=式
 
+=
かごわりあて
変数+=式
 
-=
減算代入
変数-=式
 
<<=
左に移動して値を割り当てる
変数<<=式
 
>>=
右に移動すると値が割り当てられます
変数>>=式
 
&=
ビットとポストで値を割り当てる
変数&=式
 
^=
ビットごとに値を割り当てる
変数^=式
 
|=
ビットまたはポストで値を割り当てる
変数|=式
 
15
,
カンマ演算子
式、式、...
左から右
左から右へ順番に演算
演算子優先度テーブルの出典
演算子は覚えにくくなくて、優先度と結合性は比較的に覚えにくいです!
したがって、コード行の演算子が多い場合は、カッコで式の操作順序を決定したほうがいいことをお勧めします.特に優先度を忘れた場合には、デフォルトの優先度を使用することを避けることができます.
if文(ゼロ値と比較)
ブール変数とゼロ値の比較:
ブール変数をTRUE、FALSE、または1、0と直接比較することはできません.
正しい方法は次のとおりです.
if (flag)   //   flag  
if (!flag)  //   flag  
//          
if (flag == TRUE)
if (flag == FALSE)
if (flag == 1)
if (flag == 0) 

整数変数とゼロ値の比較:
整数変数は"=="または"!="で直接0と比較する必要があります.
正しい方法は次のとおりです.
if (value == 0)
if (value != 0)
//                
if (value)
if (!value)

浮動小数点変数とゼロ値の比較:
浮動小数点変数を"=="または"!="で任意の数値と比較することはできません.
浮動小数点タイプには精度の制限があるので、">="または"<="の形式に変換する必要があります.
だから
if (x == 0.0)
から
if ((x>=-EPSINON) && (x<=EPSINON)) //  EPSINON      (   )

ポインタ変数とゼロ値の比較:
ポインタ変数を"=="または"!="でNULLと比較する
NULLの値は0と同じですが、意味は異なります.
if (p == NULL)
if (p != NULL)
//             
if (p == 0)
if (p != 0)
//             
if (p)
if (!p)
時々
if(NULL==p)という変なフォーマットは、プログラムが間違っているのではなく、プログラマーが防ぐために
if(p==NULL)誤記
if (p = NULL) .コンパイラは
if(p=NULL)は合法ですが、
if(NULL=p)は、値を付与できないためエラーです.
ループ文の効率
推奨事項:
  • 多重サイクルでは、可能であれば、最長サイクルを最内層に、最短サイクルを最外層に置くように努力しなければならない.CPUがループ層を横切る回数を減らすために
  • .
  • 循環体内に論理判定が存在する、かつ循環回数が大きい場合は、論理判定を循環体の外面
  • に移すことが望ましい.
  • forサイクル内でサイクル変数を修正することはできず、forサイクル損失制御
  • を防止する.
  • for文のループ制御変数の値は「半開半閉区間」で
  • と表記することを推奨する.
    switch文
  • 各case文の末尾にbreakを付ける必要があります.複数のブランチを意図的にオーバーラップさせない限り、
  • .
  • 最後のdefaultブランチを忘れないでください.プログラムが必要なくても、保存しなければなりません.これはdefault処理を忘れたと誤解されないようにするためです.
    goto文
    gotoは構造化されたデザインスタイルを破壊しますが.一部のオブジェクトの構造、変数の初期化、重要な計算などの文をスキップしてエラーや危険をもたらす可能性があります.そのためgotoは通常推奨されません.しかし、その1つの役割は無視できない:多重ループから一気にループの外に飛び込み、複数のbreak文を必要としない.