与char *冲突的类型

时间:2009-05-20 01:39:39

标签: c pointers function

我有一个小程序来测试传入和传出函数的char *指针。 当我用cc编译时,我得到警告和错误,说我有相互冲突的类型,即使我的所有变量都是char *。请指教

#include <stdio.h>

main()
{
    char* p = NULL;

    foo1(p);
    foo2();
}

void foo1(char* p1)
{
}

char* foo2(void)
{
    char* p2 = NULL;

    return p2;
}

p.c:11: warning: conflicting types for ‘foo1’
p.c:7: warning: previous implicit declaration of ‘foo1’ was here
p.c:15: error: conflicting types for ‘foo2’
p.c:8: error: previous implicit declaration of ‘foo2’ was here

2 个答案:

答案 0 :(得分:17)

您需要在main()函数之前对函数进行原型设计。

示例:

void foo1(char *p1);
char* foo2(void);

int main(.......

或者只是将这些函数的实体放在主函数之上。

答案 1 :(得分:4)

正如ghills所说,要修复错误,请将函数定义移到main()上方或将函数原型放在那里。

错误的原因是编译器看到:

foo1(p);
foo2();

在看到foo1()foo2()的声明或定义之前,它假定这些函数的返回类型为int。在C的早期,int被认为是合理的默认返回类型(在最早的C版本中没有void类型)。如今,省略返回类型被认为是不好的做法,编制者抱怨它。