xx的c程序冲突类型错误和以前的xx隐式声明在这里 [英] Error in c programme conflicting types for xx and previous implicit declaration of xx was here

查看:297
本文介绍了xx的c程序冲突类型错误和以前的xx隐式声明在这里的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个定义了两个函数的文件insert.c:
1.insert_after
2.insert_before



定义这些func是这样的:

  insert_after(arg1)
{
if(condition 1)
{.........}
else
insert_before(arg1);


insert_before(arg)
{
if(条件1)
{.........}
else
insert_after(arg);
}

现在,如果此文件的insert.c包含在main.c和insert_after函数中被称为

 #includeinsert.c
int main()
{
insert_after(ARG);
返回0;
}

在使用gcc编译main.c时,遇到以下错误: p>


'insert_before'冲突类型


$ b 注意:以前的隐式声明'insert_before'在这里


这里有什么问题以及如何避免它?

解决方案

这是因为你没有为你的函数声明原型。默认情况下,没有原型的函数有一组未知的参数并返回一个int。但对于 insert_before 而言,情况并非如此。



创建一个文件 insert.h 您可以在其中声明它们:

  #ifndef INSERT_H 
#define INSERT_H

void insert_before(type_of_arg);
void insert_after(type_of_arg);

#endif / * INSERT_H * /

insert.c



您应该使用以下内容进行编译:

  gcc -Wall -Wstrict-prototypes -Wmissing-prototypes -o progname insert.c main.c 


Suppose I have a file insert.c in which two functions are defined: 1.insert_after 2.insert_before

The definitions of these func are something like this:

insert_after(arg1)
{ 
  if(condition 1)
    { ......... } 
  else
    insert_before(arg1); 
}

insert_before(arg)
{ 
  if(condition 1)
    { ......... } 
  else
    insert_after(arg); 
}

Now if this file insert.c is included in main.c and insert_after function is called

# include "insert.c"
int main()
{
  insert_after(arg);
  return 0;
}

On compiling main.c using gcc,the following error is encountered:

conflicting types for ‘insert_before’

note: previous implicit declaration of ‘insert_before’ was here

What is wrong here and how to avoid it?

解决方案

This is because you don't declare prototypes for your functions. A function which has no prototype, by default, has an unknown set of arguments and returns an int. But this is not the case for insert_before.

Create a file insert.h in which you declare them:

#ifndef INSERT_H
#define INSERT_H

void insert_before(type_of_arg);
void insert_after(type_of_arg);

#endif /* INSERT_H */

and include this file at the top of insert.c.

You should then compile with:

gcc -Wall -Wstrict-prototypes -Wmissing-prototypes -o progname insert.c main.c

这篇关于xx的c程序冲突类型错误和以前的xx隐式声明在这里的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆