2011-09-15 80 views
1
#include "stdafx.h" 
#include<stdio.h> 
int aarray[]={1,2,3,4,5,6,7,8}; 
#define SIZE (sizeof(aarray)/sizeof(int)) 

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

爲什麼打印2? SIZE是8,它大於-1,所以它應該打印1。但爲什麼打印2?請幫助我理解。使用宏中的c

+0

謝謝sidyll和cnicutar。 – Angus

回答

6

您正在比較有符號值(-1)和無符號值(由SIZE生成的值爲size_t,它是未簽名的)。

因此-1被提升爲無符號並且變得大於SIZE

2

看看你最喜歡的C書的類型提升。 sizeof的結果是無符號的,然後-1被轉換爲無符號,這是一個很大的數字。