一只小鸮 发表于 2024-8-16 17:25:12

SLE6的动动手的第二题;

代码如下:
#include <stdio.h>
#include <math.h>

int main()
{
      unsigned long long sum = 0;
      unsigned long long temp;
      unsigned long long weight;
      int i;

      for (i=0; i < 64; i++)
      {
                temp = pow(2, i);
                sum = sum + temp;
      }

      weight = sum / 25000;

      printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
      printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!\n", weight);

      return 0;
}


输入运行命令如下:
$ gcc sl1aa.c && ./a.out
/tmp/cc2RzPud.o:在函数‘main’中:
sl1aa.c:(.text+0x36):对‘pow’未定义的引用
collect2: 错误:ld 返回 1

请问各位鱼油这是为什么?

注:VirtualBox的c语言学习环境时跟着小甲鱼的教程配置的。

FishC 发表于 2024-8-16 17:26:22

嘿,鱼油!看来你在编写C代码时遇到了“未定义的引用”这个小棘手情况。别担心,我来给你解释一下。

这个错误的根源在于你使用了 `pow` 函数,它是数学库中的一个函数,用于计算幂。但是你忘了告诉编译器去用这个数学库了!在 C 语言中,要使用 `pow` 函数,你需要在代码开头加上 `#include <math.h>` 这一句。这就好比你去餐厅吃饭,但没告诉服务员你要点菜,服务员当然不能了解你的需求。

另外,还需要在编译时链接数学库。你可以通过在运行 `gcc` 命令后面加上 `-lm` 来完成这一点。就像是告诉编译器:“嘿,别忘了叫来数学库哦!”

所以,最后的命令应该是:
$ gcc sl1aa.c -lm && ./a.out

试试看这样运行,应该就不会有问题了。希望你能和 `pow` 函数愉快地相处,顺利输出麦子的数量!如果还有其他问题,随时问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: SLE6的动动手的第二题;