如何解决为什么我的函数会产生“冲突类型”错误?
我尝试不看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 2.5F
和双精度return 2.5
,但这并不能解决问题。
(顺便说一句我使用gcc编译器版本9.2.0)
解决方法
我认为发生此问题是因为该函数已存在于我所包含的一个库中,因此我将其名称更改为
strtof()
,并且问题相同。 >
您快到了:strtof()
和atof()
都是您平台的库函数。使用类似my_strtof()
或my_atof()
的东西。
参考:
- man
strtof()
-在stdlib.h
中原型化
- man
atof()
-在stdlib.h
中原型化
和它们都是标准的C库函数。
, C标准已经在标题atof
中包含名称为<stdlib.h>
的函数。
它被声明为
#include <stdlib.h>
double atof(const char *nptr);
因此,您的函数声明与具有相同名称的C标准函数声明冲突。
您需要重命名功能。
并使用限定符const
声明参数,方法与声明标准函数的参数相同。
还要注意,您的功能中有错字。
代替此语句中的赋值
sign = (s[i] = '-') ? -1 : 1;
应该有比较
sign = (s[i] == '-') ? -1 : 1;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。