我想我遇到了一个整数溢出问题,我不确定如何修复它.我刚从Python和JS开始学习C语言,这对我来说都是新的.

我在下面举了一个非常简单的例子来说明正在发生的事情.我将一个参数从main函数传递给另一个函数,以便乘以3,但是当它被传递时,数字溢出.这个数学运算在main函数中起作用.

#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:警告:‘Number’的类型默认为‘int’[-WIMPLICIT-INT]`

printf号正在展示

calc result: 438711637
main result: 3333333333333

推荐答案

编译器警告提示了问题--因为您没有显式定义number参数的类型,所以编译器假定它是int.因此,number * 3也是int,并且发生整数溢出.

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

long long calc(long long number){
    /* Here ---^ */
    return number*3;
}

C++相关问答推荐

我可以动态分配具有空类型函数的矩阵吗?

gcc已编译的可执行文件TSB是否同时暗示最低有效字节和最低有效位?

由Go调用E.C.引起的内存快速增长

将指针作为参数传递给函数

以前版本的tty_ldisc_ops.ioctl()是否也需要文件参数?

为什么在此程序中必须使用Volatile关键字?

为什么我不能只在内存地址中添加一个int来寻址任何数组?

在C++中父进程和子进程中的TAILQ队列同步问题

处理来自浏览器的HTTP请求

获取前2个连续1比特的索引的有效方法

为什么电路板被循环删除?

将数字的每一位数平方,并使用C将它们连接为一个数字(程序不能正确处理0)

无法识别C编程语言的语法,如书中所示

存储和访问指向 struct 的指针数组

C中的空指针是什么(_N)?

使用 c 中的 write() 函数将非 ASCII 字符写入标准输出

将数组返回到链表

创建 makefile 来编译位于不同目录中的多个源文件

C 预处理器中的标记分隔符列表

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?