什么是‘conflicting type’?C语言fact函数类型冲突报错解惑
关于C语言中"conflicting types for 'fact'"报错的解析
"conflicting type"的含义
conflicting type即类型冲突,指编译器检测到同一个函数的声明与定义在类型信息上存在矛盾,无法将二者关联为同一个函数,因此抛出该错误。
报错原因分析
先看你编写的错误代码:
#include<stdio.h> long fact(int x); int main() { long x=fact(5); printf("%ld",x); } long fact(long x) { long prod=1; int i=1; if(x==0) return 1; else { while(i<=x) { prod=prod*i; i++; } return prod; } }
这段代码里,函数的声明和定义参数类型不匹配:
- 声明部分
long fact(int x);指定参数x是int类型 - 定义部分
long fact(long x)却把参数x定义成了long类型
在C语言中,判断两个函数是否为同一个,核心依据是函数名+参数的类型和数量(返回值类型不参与函数签名的匹配)。你只注意到返回值都是long,但忽略了参数类型必须在声明和定义中完全一致——编译器会把fact(int)和fact(long)判定为两个同名但类型冲突的函数,所以触发了error: conflicting types for 'fact'报错。
当你把函数定义的参数类型改为int后,代码如下:
#include<stdio.h> long fact(int x) { long prod=1; int i=1; if(x==0) return 1; else { while(i<=x) { prod=prod*i; i++; } return prod; } } int main() { long x=fact(7); printf("%ld",x); }
此时函数的声明(因为定义写在main之前,相当于同时完成了声明和定义)与调用时传入的int类型参数完全匹配,编译器能识别为同一个函数,因此可以正常编译运行。
内容的提问来源于stack exchange,提问作者Ibtida Bin Ahmed
相关产品推荐
相关产品推荐

