在c中使用宏

Ang*_*gus 1 c

#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;
}
Run Code Online (Sandbox Code Playgroud)

为什么打印2?SIZE是8,大于-1所以它应该打印1.但为什么打印2?请帮我理解.

cni*_*tar 6

您比较带符号的值(-1)和一个无符号值(由所产生的值SIZE就是size_t其是无符号).

因此-1被提升为无符号并变得大于SIZE.