C语言问题:函数在头文件中声明,如何避免重定义??

mvsqr2 2009-07-27 02:42:17
我写了一个函数func.c
里面有函数void func()的定义。当然,为了实现这个定义,还有很多其他函数服务于func(),比如void a(); void b();
这些函数也在这个func.c文件中,并且为了避免重定义,我都加了static,变成static void a(); static void b();。
同时func.c中还有一些全局变量,和一些宏定义(如#define PI 3.14)

现在我需要在另一个C文件(my.c)中调用这个func()函数,于是将func.c装入头文件func.h,如下
#include "func.c"
void func();


my.c如下
#include "func.h"

void a()
{
;
}

void main()
{
a();
}


这个时候,由于已经在func.c中定义了函数a(),所以出现重定义的错误。


请问1,C语言中如何解决这个重定义问题??

问题2:我看过其他的头文件,里面声明了很多函数,但是一般只会调用里面的几个,编译时不会产生任何警告,但是自己写的头文件,里面声明2个函数,只调用一个,就警告一个函数没有调用,这是为什么呢?

谢谢~!!
...全文
1157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mvsqr2 2009-07-27
  • 打赏
  • 举报
回复
谢谢各位~!!问题1已经解决

问题是在#include "func.c"中,头文件中不需要#include "func.c"
需要把func.c加入工程文件中(以前我只写过一个.c的工程)
然后就没问题了,作用域也只有函数所在文件而已!
rejoice914 2009-07-27
  • 打赏
  • 举报
回复

#ifndef xxxxx
#define xxxxx
#endif
The_facE 2009-07-27
  • 打赏
  • 举报
回复
#include "**.c"

这本身就不正常。

如果希望函数作用域在文件内,就写成static函数。

用同一个声明来玩两个函数,这可能吗?
hzfushi 2009-07-27
  • 打赏
  • 举报
回复
楼主提的问题感觉不是很清楚啊。
1.出现重定义错误。
应该是指同一个函数名有两次定义,我觉得在实际的编程中就不应该有这种做法,没有意义。你已经知道了有个函数命名为a(),那为什么还要在另一个文件中还这样命名呢。这样就算知道了C语言怎样处理又怎么样呢。编译器修改了规则,不是就不一样了吗。这些错误就应该避免掉。

2.第二个问题也比较类似。有的编译器是这样的。像在VC中,你定义了变量没有使用,它就可能出现警告。但在别的环境下,或者level级别低一点的设置情况下就不会出现这类警告。


总的来说,楼主可以去看看C语言方面的书籍,对于这些问题的探讨是好的,但觉得有些问题实际中根本不会去这样实践的就不需要再去琢磨了。因为实际中你根本不会这样去用。(仅作为个人意见)
mvsqr2 2009-07-27
  • 打赏
  • 举报
回复
我加了
#ifndef _FUNC_H_
#define _FUNC_H_

......

#endif
还是不行,我觉得问题在#include "func.c"中,这样my.c与func.c合并了。
还有我就是希望同一个函数名的作用域只有所在文件本身,我希望学习这种方法,使我的程序扩展性更好!
The_facE 2009-07-27
  • 打赏
  • 举报
回复
#include "func.c"

这算什么?
大前置 2009-07-27
  • 打赏
  • 举报
回复

extern void func();
mstlq 2009-07-27
  • 打赏
  • 举报
回复
用一楼所说的宏开关^_^
fireyou 2009-07-27
  • 打赏
  • 举报
回复
报重复定义就改名吧
函数命名要一下就体现出此函数的作用,这样一般不会重名
mengjfu 2009-07-27
  • 打赏
  • 举报
回复
#ifndef _FUNC_H_
#define _FUNC_H_

......

#endif
在func.h中加上这句试试

69,371

社区成员

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

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