冲突类型C

时间:2016-03-01 00:43:33

标签: c types

我遇到了一些我不理解的冲突类型的问题。我想改变之前设定的日期,但这让我很头疼。

int main(){
float any=11;
llegirany(&any);
printf("%f",any);
getch();    
}

void llegirany(float * any){    
float auxi; 
auxi=llegirinterval(1,31);  
*any= auxi;
}

float llegirinterval(float n1,float n2){
float aux;
       do{          
            scanf("%f",&aux);
        }while(aux>n2 || aux<n1);
return aux;
}

我收到此输出错误:

  

65 7 D:\ DAM \ PRo \ pruebaconio.c [错误]的冲突类型   'llegirinterval'62 7 D:\ DAM \ PRo \ pruebaconio.c [注意]之前   'llegirinterval'的隐式声明在这里

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

您在声明之前使用了llegirinterval功能。

您应该在llegirinterval定义之前移动llegirany定义,或者至少声明 {{ 1}}之前使用它。

检查difference between definition and declaration

在@Olaf评论后编辑。

答案 1 :(得分:1)

在使用之前,尝试向函数 llegirinterval()添加声明。您还应该声明代码中包含的其他函数:

void llegirany(float *any);
float llegirinterval(float n1,float n2);

int main(){
    float any=11;

...

void llegirany(float * any){
    float auxi;
    auxi=llegirinterval(1,31);
    *any= auxi;
}

默认情况下,C会将尚未明确键入的任何变量名称的类型视为 int 。所以,当它看到调用时:

llegirany(&any);

在main的第三行,编译器说“aha,一个名为 llegirany 的函数,它返回一个 int

稍后,当编译器到达函数的实际函数定义时,它会变得混乱 - 等等,我认为 llegirany 返回 int ,现在你告诉我它返回一个 float