C语言中 多个源文件之间函数如何调用问题

C语言中 多个源文件之间函数如何调用问题
主函数3.c
#include<stdio.h>
#include<malloc.h>
struct add *wwe();
struct add
{
int xuehao;
};
main()
{
struct add *p1;
wwe();
}
被调函数332.c
#include <stdio.h>
#include<malloc.h>
struct add *wwe()
{
extern struct add *p1;
p1=(extern struct add *)malloc(sizeof(extern struct add));
}
为什么会出现这样的错误呢?
332.c
C:\Program Files\Microsoft Visual Studio\MyProjects\123\332.c(6) : error C2027: use of undefined type 'add'
C:\Program Files\Microsoft Visual Studio\MyProjects\123\332.c(3) : see declaration of 'add'
执行 cl.exe 时出错.

第1个回答  2011-10-22
题目明显提示你没有定义“add”呀,要求你查看“add”哦!再个你程序还是有问题的吧,如果你把它放到不同的源文件中一起编译连接的话,还会出现重复定义的错误吧。改正如下:
#include<stdio.h>
#include<malloc.h>
struct add *wwe();
struct add
{
int xuehao;
};
main()
{
struct add *p1;
p1=wwe();
}
//被调函数332.c
#include <stdio.h>
#include<malloc.h>
struct add *wwe() //此处你是定义一个名为wwe的函数,没有参数,返回值类型是:struct add*
{
struct add *p1;
p1=(struct add *)malloc(sizeof(struct add)); /*此处“extern”可以不要吧,一般他是用来声明用的,*/
return p1; //此处要返回一个值,没有值是不可以的
}本回答被提问者采纳
第2个回答  2011-10-19
332.c 里面必须include 3.c文件。因为3.c里没有 struct add 结构体的定义,sizeof(extern struct add),里不用extern的。 3.c里面也要include 33.2文件。因为struct add *wwe();在332.c文件里面。
你可以用头文件的方式来声明。就不用include 点C文件了追问

为什么还会出现这样的东西呢
332.obj : error LNK2005: _main already defined in 321.obj
Debug/3.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.
你可不可以帮我把它改一下呢

追答

新一个文件叫"common.h",里央写入下面内容
#ifndef __COMMON_H__
#define __COMMON_H__
struct add *wwe();
struct add
{
int xuehao;
};
#endif

把3.c里面的删掉,然后加入#include "common.h"
332.c也加入#include "common.h"
extern 是对变量的。删掉。
就应该没问题了,一个使用规则就是,在使用之间要先声明。

第3个回答  2011-10-20
先建立个头文件,以.h命名保存,要写明下面需要调用的函数,然后在主函数中才可以调用
第4个回答  2011-10-19
将struct add *wwe();放到 struct add下面试试吧~
相似回答