#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。您是否从编译器那里得到任何警告?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top