题
#include <stdio.h>
int main(void)
{
long long x = test();
printf("%lld\n", x);
return 1;
}
long long test()
{
return 1111111111111111111;
}
输出为734294471。如果我更换电话 test()
按数字,输出是我的期望。我使用调试器检查了X的值,并且没有设置函数返回的值。怎么了?
我正在使用Visual Studio 2010与Visual C ++编译器一起使用。
解决方案
您需要声明 test
在打电话之前,否则C假定它返回 int
.
其他提示
iirc,c/c ++的长期常数由“ ll”后缀。
long long test() {
return 1111111111111111111LL;
}
您的编译器将您的常数视为32位长(如果您使用常数Modulo 2^32,则获得734294471。)
尝试将LL添加到您的退货值:
long long test()
{
return 1111111111111111111LL;
}
将后缀ll添加到您的文字中,看看会发生什么。大概是编译器Conbert将字面意向为int。您是否从编译器那里得到任何警告?
不隶属于 StackOverflow