2017-05-21 8 views
0
int main() 
{ 
    if (sizeof(int) > -1) 
      printf("True"); 
    else 
      printf("False"); 
    return 0 ; 
} 

プログラムの結果は "True"と予想されますが、実行後は "False"となります。誰もがなぜこれが事実であるか説明できますか?CのIF文の中でのsizeof演算子の動作

+2

'sizeof' **演算子**の利回りは何でしたか?どのタイプ?そして、この混乱を適切にフォーマットしてください。 [ask]を読んでください。現代のコンパイラは、この比較について警告する必要があります。そうでない場合、推奨されるすべての警告を有効にします(少なくとも '-Wall -Wextra -Wconversion')。そして、常に、尋ねる前に警告の原因を修正してください。 – Olaf

+2

Cでは、if文内のsizeof演算子は、if文の外側で動作するのとまったく同じように動作します。 –

答えて

3

sizeofが返されるsize_tは、符号なしです。

比較してみると、比較のために、初心者プログラマーにとっては驚くべき結果が得られるので、ここではわかります。

基本的に、-1は非常に大きな符号なし整数に変換されるため、条件はfalseです。

+3

結果は "驚くべき"ものではありませんが、明確に定義されています。 – Olaf

関連する問題