我刚试了一下把一个无符号整数变成小于0的数,令人惊喜的是它起作用了!
#include<stdio.h>
int main(void)
{
unsigned int foo = 5;
foo -= 10;
printf("%d", foo);
return 0;
}
编译器版本
clang -Weverything main.c
该程序返回:
-5
根据这篇文章和我的个人了解,这是不可能的。但为什么它还能工作呢?我有什么遗漏吗?这是因为未定义行为吗?还是printf?或者是其他原因?
printf
效果已经得到了解答。现在,为了验证编译器并不真的认为foo
是负数,请在结尾处添加以下内容:if(foo < 0) printf("this won't print");
- dxiv