@PSkocikの答えは結構ですが、私は私の2セントを追加します。これをコメントとして行うべきか、それとも回答として行うべきかは不明です。後者を選択するのは、IMHOが他の人に見てみる価値があるのに対し、コメントはしばしば見えないからです。
時々使うだけでなく
if(0) {
//deliberately left empty
} else if( cond1 ) {
//deliberately left empty
} else if( cond2 ) {
//deliberately left empty
...
} else {
// no conditions matched
}
でも時々
if( 1
&& cond1
&& cond2
...
&& condN
) {
または
if( 0
|| cond1
|| cond2
...
|| condN
) {
複雑な条件のため。同じ理由-編集が簡単、#ifdefなど
さらに言えば、Perlで私はやります
@array = (
elem1,
elem2,
...
elem1,
) {
- リストの最後にあるコンマに注意してください。CおよびC ++リストでコンマが区切り文字または区切り文字であるかどうか忘れてしまいました。これは私たちが学んだ1つのことです:[ Perlでコンマを末尾に付けることは悪い習慣ですか?コンマ]は良いことです。新しい表記法と同様に、慣れるまでしばらく時間がかかります。
if(0)
コードをlisp と比較します
(cond (test1 action1)
(test2 action2)
...
(testn actionn))
あなたはそれを推測しました、私はインデントするかもしれません
(cond
(test1 action1)
(test2 action2)
...
(testn actionn)
)
私は時々、これについてより人間が読める構文がどのように見えるかを想像しようとしました。
たぶん
IF
:: cond1 THEN code1
:: cond2 THEN code2
...
:: condN THEN codeN
FI
Dikstraの[ https://en.wikipedia.org/wiki/Guarded_Command_Language#Selection:_if][Guarded Command Language]に。
しかし、この構文は条件が並行して評価されることを意味しますが、 if...else-if
順次評価および優先順位付けされた評価を意味します。
他のプログラムを生成するプログラムを書くとき、私はこのようなことを始めました。
その間、インテルの古いiHDLを使用してRTLを作成するとき、私は次のようなものをコーディングしました
IF 0 THEN /*nothing*/
**FORC i FROM 1 TO 10 DOC**
ELSE IF signal%i% THEN
// stuff to do if signal%i% is active
**ENDC**
ELSE
// nothing matched
ENDIF
ここFORC..DOC..ENDC
で、マクロプリプロセッサループ構造は、次のように展開されます
IF 0 THEN /*nothing*/
ELSE IF signal1 THEN
// stuff to do if signal1 is active
ELSE IF signal2 THEN
// stuff to do if signal2 is active
...
ELSE IF signal100 THEN
// stuff to do if signal100 is active
ELSE
// nothing matched
ENDIF
これは単一の代入であり、命令型ではないため、最初に設定されたビットを見つけるなどの必要がある場合、状態変数の設定は許可されませんでした。
IF 0 THEN /*nothing*/
ELSE IF signal1 THEN
found := 1
ELSE IF signal2 THEN
found := 2
...
ELSE IF signal100 THEN
found := 100
ELSE
// nothing matched
ENDIF
考えてみてください、私がそのような構造に遭遇したのはこれが最初の場所だったのかもしれません。
ところで、if(0)スタイルに対する一部の異議-else-if-conditionsは順次依存しており、任意に並べ替えることはできない-RTLのANDおよびORおよびXORロジックには適用されませんが、short-には適用されます回路&&および||。