首页 > 解决方案 > 为什么这段代码会产生关于 pow 函数的错误?

问题描述

#include <stdio.h>
#include <math.h>
int exp_for_level(int n) {
    return (int)(100 * pow(n, 2.3));
}

int main(){
    int x;
    x = exp_for_level(6);
    printf("%d", x);
    return 0;
}

在在线编译器上运行此代码时收到以下错误

/tmp/cc28S7ML.o: In function exp_for_level':
main.c:(.text+0x19): undefined reference to `pow'
collect2: error: ld returned 1 exit status

我该如何纠正这个问题?

在我无法让它在在线编译器上工作之后,我遵循了一些其他线程的建议文件存储在我的 mac 上的文件 grades.c 下我试过输入这个

$ gcc - Wall - lm -o grades grade . c

进入我的终端,我得到了zsh error: command not found

关于这里的问题有什么想法吗?我使用的在线编译器是 https://www.tutorialspoint.com/compile_c_online.php

编辑:在我的帖子中,主要是我将函数误写为 exp_to_level 而不是 exp_for_level。没有复制粘贴整个代码,因为它太长了。我缩小范围并将其重新输入到产生错误的部分。

标签: cmacosmathgcccompiler-errors

解决方案


您的代码中有一些错误,您已经定义了一个函数exp_for_level,但您使用exp_to_level.

那么你的x变量没有定义

如果您像这样修复代码:

#include <stdio.h>
#include <math.h>
int exp_for_level(int n) {
    return (int)(100 * pow(n, 2.3));
}

int main(){
    int x = exp_for_level(6);
    printf("%d", x);
    return 0;
}

你编译:

gcc -Wall powtest.c -o powtest -lm

有用。

关于在线编译器的错误:

undefined reference发生错误是因为您缺少链接器-lm选项。

编辑在线编译器命令,点击Project->Compile Options

编译选项

关于本地机器上的这个问题:

在我无法让它在在线编译器上工作之后,我遵循了一些其他线程的建议文件存储在我的 mac 上的文件 grades.c 下我试过输入这个

$ gcc - Wall - lm -o grades grade . c

进入我的终端,我只是得到 zsh 错误:找不到命令

你没有安装编译器。

你应该安装clang,看看这个问题


推荐阅读