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()
代码中未显示的参数可能是函数名输入错误。在这种情况下,当您使用一个参数调用函数时,函数将使用两个参数