#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 ++编译器。
答案 0 :(得分:4)
long long test() {
return 1111111111111111111LL;
}
你的编译器将你的常量视为32位长(如果你取常数模2 ^ 32,则得到734294471。)
答案 1 :(得分:3)
您需要在调用之前声明test
,否则C假定它返回int
。
答案 2 :(得分:1)
尝试将LL添加到您的返回值:
long long test()
{
return 1111111111111111111LL;
}
答案 3 :(得分:0)
将后缀LL添加到文字中,看看会发生什么。据推测,编译器将文字强制转换为int。您是否收到编译器的任何警告?