【发布时间】:2016-02-24 18:36:09
【问题描述】:
我在 C 中有以下代码
#include <stdio.h>
#include <limits.h>
long checks();
void main() {
int results = checks();
printf("%d", results);
}
long checks(){
return LLONG_MAX;
}
它给出 -1 的输出
尽管声明了函数原型,但这个文件如何甚至编译?
int results = checks(); 应该会报错!
而且返回类型不匹配!
在 C 中函数的返回类型不能等于相同的数据类型?
【问题讨论】:
-
在传递 int 的最大值后,它又回到 int 的最小值
-
LLONG_MAX是long long数据类型的最大值,不一定与long数据类型相同(特别是在i86 上,int和long都是4字节长,而long long是 8 个字节)。编译时在 (-Wall) 上发出警告以捕获这类事情。 -
@WeatherVane:准确地说,因为
0x7FFFFFFFFFFFFFFF“被截断为0xFFFFFFFF” -
如果
long和int大小相等(32 位),那么问题就在这里:return LLONG_MAX;。long long返回为long。 -
你的编译器想对你大喊大叫。启用警告。