为什么我的函数会产生冲突类型错误?
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;
}
我试过的:
- 我认为问题的发生是因为这个函数已经存在于我包含的库之一中,所以我将它的名称更改为 strtof() 并且问题是一样的。
- 我尝试更改函数的类型,但问题仍然存在。
- 我尝试 return 浮点数
return 2.5F
和双数 return 2.5
但这并没有解决问题。
(顺便说一句,我使用 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()
.
之类的东西
参考:
- man
strtof()
- 原型在 stdlib.h
- man
atof()
- 原型在 stdlib.h
而且都是标准的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;
我试图在没有看的情况下从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;
}
我试过的:
- 我认为问题的发生是因为这个函数已经存在于我包含的库之一中,所以我将它的名称更改为 strtof() 并且问题是一样的。
- 我尝试更改函数的类型,但问题仍然存在。
- 我尝试 return 浮点数
return 2.5F
和双数return 2.5
但这并没有解决问题。
(顺便说一句,我使用 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()
.
参考:
- man
strtof()
- 原型在stdlib.h
- man
atof()
- 原型在stdlib.h
而且都是标准的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;