0

if ステートメントのような長い条件を入れるのは良い習慣ではありませんか?

if(((FIO2PIN & 0x00001000)>>12))

ARM7の最後に0/1として結果を与えるのはどれですか?

if 条件で 0 または 1 しかチェックできないようにするためですか?

例えば

if(x!=0)

また

if(x==1)??

間接的 (FIO2PIN & 0x00001000)>>12には、FIO2PIN のステータスに応じて 0/1 になる可能性のある値も最後に与えられますか?

4

2 に答える 2

1

((FIO2PIN & 0x00001000)>>12)は整数式であり、によって暗黙的にブール値にキャストされます。if(...)ゼロはfalseで、ゼロ以外はtrueです。

コンパイラーと言語定義に関する限り、完全に明確であるという意味では、それは何も悪いことではありませんが、プログラマーの意図を明確にするために、条件ステートメントでは明示的にブール式のみを使用することを好みます。これは、結果を明示的にゼロと比較することで簡単に実行できます。この場合:

if( ((FIO2PIN & 0x00001000) >> 12) != 0 )

ただし、ゼロ以外の値は真として受け入れられるため、どちらの場合もシフトはまったく不要です(そのため、常にゼロと比較するか、まったく比較しないでください)。そう:

if( FIO2PIN & 0x00001000 )

また

if( (FIO2PIN & 0x00001000) != 0 )

も同様に有効です - 後者が私の好みです。

前述のように、ゼロ以外の値は真として受け入れられますが、ゼロのみが偽であるため、xは整数式であり、テストx == 1は危険なものであり、x != 0代わりに使用する必要があります。

于 2013-07-21T09:27:49.173 に答える
0

The if statement will be true if the expression is non-zero. So shifting right by twelve bits is not necessary in your example. Because (FIO2PIN & 0x00001000) is non-zero whenever ((FIO2PIN & 0x00001000) >> 12) is non-zero. In other words, it doesn't matter which bit is non-zero. The if statement will test true if any bit is non-zero.

In my opinion, using a complex expression within an if statement could be bad practice if the expression is so complex that it is difficult for a developer to understand or maintain. But otherwise, as long as the expression is correct, then the compiler should sort it out and you shouldn't need to worry whether it is too complex for the compiler.

于 2013-07-20T19:24:54.700 に答える