关于.h和.c文件

willopp 2010-02-01 12:43:53
小弟初学c语言,看到说变量和函数的声明一般在.h里,定义在.c里
现在我在a.h中声明了一个struct Point,在a.c里定义了,但是我在main.c里include a.h想使用Point的
时候确告诉我storage size of xx is unknown,请问我应该怎么做?
.h和.c到底怎么结合使用的?谢谢
...全文
201 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mstlq 2010-02-01
  • 打赏
  • 举报
回复
struct test
{
int i;
int j;
};
//上面四行加起来才是一个完整的声明!!……
The_facE 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 toborac 的回复:]
a.h:
  struct Point; 这是声明了 但是include a.h的模块并不知道Point长啥样
a.h:
  struct Point {
    int x,y;
  }; 这是定义了Point数据类型
你说的应该是在.c里面实现,一般对函数而言,比如
a.h:声明一个函数
  draw(struct Point p);
a.c:定义这个函数
  draw(struct Point p)
  {
    ..
  }

[/Quote]


把所有分配空间的行为都放到.c文件里就可以了。


// 文件a.h
struct Point {
int x;
int y;
};
// 这也不是变量定义啊,为什么不能写到.h中?


把定义写到.c中,主要是针对全局变量和函数而言,数据结构的定义既不分配空间,又不改变内存,有什么不可以?
bladesoft 2010-02-01
  • 打赏
  • 举报
回复
是不是声明不够完整,还是声明到其他文件里面了。最好能贴主要代码出来,大家也好帮你看看错误在哪里
z569362161 2010-02-01
  • 打赏
  • 举报
回复
定义是有规定的。


guoyu_bo 2010-02-01
  • 打赏
  • 举报
回复
main.c里是include "a.c"
a.c里是include "a.h"
guoyu_bo 2010-02-01
  • 打赏
  • 举报
回复
不是include a.h
是include a.c
编译时两个c一起编译
gcc a.c main.c
东大坡居士 2010-02-01
  • 打赏
  • 举报
回复
貼代碼吧,是變量進行聲明,而不是類型進行聲明
toborac 2010-02-01
  • 打赏
  • 举报
回复
a.h:
struct Point; 这是声明了 但是include a.h的模块并不知道Point长啥样
a.h:
struct Point {
int x,y;
}; 这是定义了Point数据类型
你说的应该是在.c里面实现,一般对函数而言,比如
a.h:声明一个函数
draw(struct Point p);
a.c:定义这个函数
draw(struct Point p)
{
..
}
mstlq 2010-02-01
  • 打赏
  • 举报
回复
例子

/*a.h*/
struct test
{
int i;
int j;
};
//上面四行加起来才是一个完整的声明!!……

extern struct test myt;/*声明一个变量struct test类型的变量,变量名字叫myt*/




/*a.c*/
#include "a.h"

struct test myt;/*变量myt的真正定义*/




/*main.c*/
#include "a.h"

int main()
{
myt.i=0;/*访问变量myt*/
return 0;
}

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧