3

以下のコードを検討してください。

#include<stdio.h>
int array[]={1,2,3,4,5,6,7,8};
#define SIZE (sizeof(array)/sizeof(int))

int main()
{
        printf("%d",SIZE);
        if(-1<=SIZE) printf("1");
        else printf("2");
        return 0;
}

出力として 82 が得られますが、if 句の mean -1 を 0 または非負の数に置き換えると、出力として 81 が得られますif(-1<=SIZE)。異なる出力が得られるのはなぜですか?if(0<=SIZE)if(1<=SIZE)

4

1 に答える 1

10

このsizeof演算子は、符号なし整数型の asize_tを返します。符号なし整数に変換すると、非常に大きな数値が得られます。-1

ビルド時にさらに警告をオンにすると、コンパイラは符号付きデータ型と符号なしデータ型の比較について警告します。

于 2012-10-08T13:37:39.397 に答える