在 C 中传递参数时出现整数溢出

问题描述 投票:0回答:1

我认为我遇到了整数溢出问题,但我不知道如何解决它。我刚刚从 Python 和 JS 开始学习 C,这对我来说是全新的。

我在下面举了一个非常简单的例子来说明正在发生的事情。我将一个参数从主函数传递给另一个函数以乘以 3,但是当它传递时,数字会溢出。数学在主函数中进行。

#include <stdio.h>

long long calc(number){
    return number*3;
}

int main(void)
{
    
    long long digits = 1111111111111;
    long long result = calc(digits);
    printf("calc result: %lld\n", result);
    
    long long mainTimes3 = digits*3;
    printf("main result: %lld\n", mainTimes3);
    

    return 0;
}

我收到错误消息

main.c:3:11: warning: type of ‘number’ defaults to ‘int’ [-Wimplicit-int]

printf 正在显示

calc result: 438711637
main result: 3333333333333
c integer-overflow
1个回答
0
投票

编译器警告提示了问题 - 由于您没有显式定义

number
参数的类型,编译器假定它是
int
。因此
number * 3
也是
int
,发生整数溢出。

要解决该问题,请将其显式定义为您想要的类型,

long long
:

long long calc(long long number){
    /* Here ---^ */
    return number*3;
}
© www.soinside.com 2019 - 2024. All rights reserved.