for (; cnt--; dp += sz)
{
pair_sanitize_struct(rec_id, ctx->api_mode, dp, FALSE);
}
この for ループがどのように機能するかを誰かが説明できますか? cpp ファイルに属します。for ループの条件とそのチェック方法がわかりません。(関数呼び出し中)
for (; cnt--; dp += sz)
{
pair_sanitize_struct(rec_id, ctx->api_mode, dp, FALSE);
}
この for ループがどのように機能するかを誰かが説明できますか? cpp ファイルに属します。for ループの条件とそのチェック方法がわかりません。(関数呼び出し中)
ステートメントの一般的な形式はfor
次のようになります。
for (init-statement; condition; expression)
statement
init-statement
ループの過程で変更される開始値を初期化または割り当てるために使用されます。condition
ループコントロールとして機能します。condition
true と評価される限り、statement
実行されます。がtrue のexpression
場合にのみ、反復ごとに評価されますcondition
コードに戻ります。
for (; cnt--; dp += sz)
init-statement
これは、何もしない null ステートメントです。condition
はcnt--
、その値をcnt
デクリメントとして評価します1
。cnt
がゼロでない場合condition
は真、cnt
ゼロの場合condition
は偽です。
条件は、真または偽のシナリオとして解釈されています。
0 の場合は false、それ以外の場合は true になります。
これは次のコードと同等です -
for(; cnt-->0; dp += sz);
値が 0 に等しくない限り、真と見なされるためです。
c++ では、真または偽である条件の値は、非 0 (真) または 0 (偽) によって決定されます。
上記のループは、cnt が 0 でない限り反復し続けます。cnt が 0 になると終了します。
アップデート:
ここで重要な点を明確にするために、ループを終了するのは値 0 です。何らかの理由でcnt がすでに負の値で始まっている場合、ループは終了しません。
So syntax for for loop is
for (<initialization(optional)>; <condition(Optional)>; <increment(Optional)>)
{
...
}
Say for cnt is 2 your loop works as follows,
for(; cnt--; dp+=size)
{
...
}
Execution flow is,
1. initialization statement will be executed once. Since you dont have one nothing will be executed
2. Next condition statement will be executed. In your case cnt-- which result in cnt value is considered as condition result. So, if cnt is 2 then value 2 is considered as condition result. Hence all non-zero are considered as TRUE and zero is considered as FALSE. After evaluating to TRUE it decrements cnt by 1
3. Once the condition results in TRUE then it executes the statement part say, pair_sanitize_struct(rec_id, ctx->api_mode, dp, FALSE);
4. At the last it executes the increment statement of for loop,in you case it is dp-=size;
5. It executes from 2 till condition evaluated to ZERO ie FALSE it comes out of loop.
通常の整数はブール値としても使用できることに注意してください。ゼロは false で、ゼロ以外はすべて true です。
これは、cnt
がゼロになるまでループが続き、その後ループが終了することを意味します。ただし、ポストデクリメント演算子が使用されるためcnt
、ループが終了した後の値は になります-1
。
に似ています
while(cnt--)
{
pair_sanitize_struct(rec_id, ctx->api_mode, dp, FALSE);
dp += sz;
}
これが役に立てば幸いです。