Vai*_*wal 3 c if-statement c-preprocessor
请考虑以下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我得到82作为输出,但如果我更换if(-1<=SIZE)用if(0<=SIZE)或与if(1<=SIZE)装置-1如果子句0或非负数,然后我得到81作为输出.为什么我会得到不同的输出?
Som*_*ude 10
的sizeof操作者返回一个size_t它是一个无符号的整数类型.当您转换-1为无符号整数时,您将得到一个非常大的数字.
在构建时打开更多警告,编译器将警告您有关比较已签名和未签名的数据类型.