2011-09-15 7 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는 -1보다 큰 8이므로 1을 인쇄해야합니다. 그러나 2를 인쇄하는 이유는 무엇입니까? 이해 좀 도와주세요.매크로를 사용하여 매크로 사용

+0

감사합니다. sidyll 및 cnicutar. – Angus

답변

6

부호가있는 값 (-1)과 부호가없는 값 (SIZE이 생성 한 값은 부호가없는 size_t)을 비교합니다.

따라서 -1은 부호 없음으로 승격되고 SIZE보다 커집니다.

2

좋아하는 C 책에서 유형 홍보를 살펴보십시오. sizeof의 결과는 부호가 없으며 -1은 큰 숫자 인 부호가없는 것으로 변환됩니다.

관련 문제