C 编译器中存在冲突类型错误

C 编译器中存在冲突类型错误,c,C,我的问题是,我不断得到相同类型的错误,我不明白为什么。我确信我在主函数之前声明并定义了它 这是我的密码 #include <stdio.h> void functn (int x); int functn(int x, int result){ result = (x-1)+2; if (x <= 0){ return 0; } else{ return result; } } int main (){

我的问题是,我不断得到相同类型的错误,我不明白为什么。我确信我在主函数之前声明并定义了它

这是我的密码

#include <stdio.h>
void functn (int x);

int functn(int x, int result){
    result = (x-1)+2;
    if (x <= 0){
        return 0;
    }
    else{
        return result;
    }
}

int main (){

int x, y;
  printf ("Enter the value of x: ");
  scanf ("%d", &x);
  y = f(x);
  printf ("%d", y);
  return 0;
}
#包括
无效函数(int x);
int函数(int x,int结果){
结果=(x-1)+2;

如果(x返回
functn()
的类型在声明和定义中不同,那么使用

int functn(int x);
而不是

int functn(int x, int result)
 y = f(x);
从函数参数中删除
int result
,并在函数内部声明。例如

int functn(int x)
{
    int result = 0;
    result = (x-1)+2;
    if (x <= 0){
        return 0;
    }
    else{
        return result;
    }
}
而不是

int functn(int x, int result)
 y = f(x);

functn
中有许多问题。主要是传递
result
。将结果传递给
functn
时,
functn
会收到
result
副本,获取修改值的唯一方法是返回修改后的值。您还可以传递指向
re>的指针在
functn
中执行sult
和update
*result
(与您现在所做的类似),这样就不需要返回值,因为对
result
的任何更改都可以在调用函数中看到(
main()
此处)。此外,不需要全局变量。只需根据需要将变量声明为
main
的局部变量并作为参数传递即可

下面的示例声明
functn
(以下简称
f
)要同时执行,请使用指向
结果的指针(例如
)作为一个参数,同时还返回
结果
,该参数允许您分配或不分配返回,但始终将
结果
的更新值返回到
main
,例如

#include <stdio.h>

int f (int x, int *result);

int main (void){

    int x, y, result = 0;
    printf ("Enter the value of x: ");
    if (scanf ("%d", &x) != 1) {
        fprintf (stderr, "error scanf, invalid conversion.\n");
        return 1;
    }

    y = f (x, &result);
    printf ("y = f(%d) => %d\n", x, y);

    return 0;
}

int f (int x, int *result) 
{
    *result = (x-1)+2;

    if (x <= 0)
        return 0;

    return *result;
}

检查一下,如果有问题请告诉我。

您的
functn()
函数定义和声明不同
void functn(int x);
int functn(int x,int result)
,是的,我认为编译器是正确的!只需删除顶部的函数声明。定义发生在调用函数之前,因此不需要它。此外,您正在调用函数
f()
代码中未显示的参数可能是函数名输入错误。在这种情况下,当您使用一个参数调用函数时,函数将使用两个参数