为什么我的函数会产生冲突类型错误?

Why does my function produces a Conflicting Types error?

我试图在没有看的情况下从C语言书上复制函数atof(),我写了它并且每一行代码似乎都是正确的,但是当我编译程序时它告诉我有一个类型冲突错误 .

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

float atof(char s[]); // the error is produced here

int main()
{
    char line[100] = "672";
    float num = atof(line);

    printf("%f", num);
    return 0;
}

// I didn't finish the function yet...
float atof(char s[])
{
    int i, sign;
    float n;
    for(i = 0; s[i] == ' '; i++)  // skip white spaces
        ;
    // set sign to the -1 if it is negative, 1 if else
    sign = (s[i] == '-') ? -1 : 1;
    if(s[i] == '+' || s[i] == '-')
        i++;
    for(n = 0.0; isdigit(s[i]); i++)
    {
        n = 10.0 * n + (s[i] - '0');
    }
    return n * sign;
}

我试过的:

(顺便说一句,我使用 gcc 编译器版本 9.2.0)

I thought that the problem occurred because this function already exists in one of the libraries that I included, so I changed it name to strtof() and the problem was the same .

您快完成了:strtof()atof() 都是您平台的库函数。使用 my_strtof()my_atof().

之类的东西

参考:

而且都是标准的C库函数。

C 标准已在 header <stdlib.h> 中包含名称为 atof 的函数。

声明为

#include <stdlib.h>
double atof(const char *nptr);

所以你的函数声明与同名的C标准函数声明冲突。

您需要重命名您的函数。

并用限定符const声明参数,方法与标准函数的参数声明方式相同。

另请注意,您的函数中有错别字。

而不是这个语句中的赋值

sign = (s[i] = '-') ? -1 : 1;

要有比较

sign = (s[i] == '-') ? -1 : 1;