首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C中获取“函数的冲突类型”,为什么?

在C中获取“函数的冲突类型”,为什么?
EN

Stack Overflow用户
提问于 2018-04-20 05:47:50
回答 2查看 0关注 0票数 0

我使用下面的代码:

代码语言:javascript
复制
char dest[5];
char src[5] = "test";

printf("String: %s\n", do_something(dest, src));

char *do_something(char *dest, const char *src)
{
    return dest;
}

这里的执行do_something并不重要。当我尝试编译上述我得到这两个异常:

错误:'do_something'的冲突类型(在printf调用处) 错误:以前的'do_something'隐式声明在这里(在原型行)

为什么?

EN

回答 2

Stack Overflow用户

发布于 2018-04-20 13:54:12

在声明它之前试图调用do_something。需要在printf行之前添加一个函数原型:

代码语言:javascript
复制
char* do_something(char*, const char*);

或者需要将函数定义移动到printf行的上方。在声明之前不能使用函数。

票数 0
EN

Stack Overflow用户

发布于 2018-04-20 15:46:46

在“经典”C语言(C89 / 90)中,当你调用一个未声明的函数时,C假设它返回一个int并且还试图从实际参数的类型中派生它的参数类型(不,它不假定它没有参数,正如有人建议)。

在你的具体示例中,编译器会查看do_something(dest, src)调用并隐式地派生出一个声明do_something。后者看起来如下

代码语言:javascript
复制
int do_something(char *, char *)

但是,稍后在你明确声明do_something

代码语言:javascript
复制
char *do_something(char *, const char *)

正如你所看到的,这些声明是彼此不同的。这是编译器不喜欢的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档