C语言中,定义自定义库函数时该如何写对应的头文件

我想写个自己的库函数以便在源码开头用#include"XXX.h"调用。我目前完成的一个包含库函数的C文件中的函数需要stdio.h,stdlib.h和string.h的... 我想写个自己的库函数以便在源码开头用#include "XXX.h"调用。
我目前完成的一个包含库函数的C文件中的函数需要stdio.h, stdlib.h和string.h的函数。因此我在相应的头文件中将这三个标准库include了。结果编译时出现了“重复定义”的报错。
我知道这是由于main中也include了stdio.h和stdlib.h,这两个库被include了两遍。因此我查看了编译器目录下的标准库头文件,但由于不懂那些带下划线的标准宏是什么意思,没太看懂。但我看它的大致思路是条件编译。
希望有这方面经验的诸位给我做个示范,我不想麻烦大家,只要帮我讲一下该如何在头文件中include <stdlib.h>,举个例子,剩下的部分我照葫芦画瓢就好了。多谢!
展开
 我来答
风若远去何人留
推荐于2016-11-08 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450108
专业C/C++软件开发

向TA提问 私信TA
展开全部
没有强制规定,但一般遵循以下原则:

1 功能类似或相关的一组函数写在同一个头文件中;
2 头文件命名应简单,尽量短,但可以通过文件名得知内部函数功能;
3 头文件名由数字、字母、下划线组成,不要有空白字符或其它符号;
4 为防止头文件重复引用,或嵌套引用,头文件应使用条件编译包含;
5 头文件中,应遵循先类型定义,后函数声明的顺序;
6 当头文件函数声明中,用到其它头文件中定义的类型时,在头文件开始处进行引用。
HarrySummer
2014-08-13 · TA获得超过680个赞
知道小有建树答主
回答量:650
采纳率:0%
帮助的人:568万
展开全部

首先,要明白一点。标准库的头文件多次include是不会发生重定义的错误的。所有的标准库文件的内容都是如这般写的:

#ifndef STDLIB_H
#define STDLIB_H
...
#endif

这保证了它的内容只会被引用一次。所以要include,只写一句

#include <stdlib.h>

就可以了。


另外,你自己的头文件最好也加上上面所示的那种保卫宏,以防多次引用你自己的头文件出现重定义。


你说的重复定义,可能是另外一个问题。你说你自己做了一个库,如果你是用 Visual C 建工程生成的 lib 库文件,要注意项目属性里有一个 ”/Mt“ "/Md" 的选项。请保证选的是后者,否则你的库文件中会有一套标准库的函数的实现,而使用你的库编译其他程序的时候,又会再次连接系统库,如此便会产生重定义。

追问

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yangjh158
推荐于2018-02-28 · TA获得超过8422个赞
知道大有可为答主
回答量:2079
采纳率:80%
帮助的人:916万
展开全部
#include "MyHead.h"
来包含。
头文件是不编译的,因为C语言编译过程之前有个预编译过程。在这个过程中用头文件中的内容替换源文件中“#include”命令,所以在编译器看来,没有头文件,只有源文件。预编译过程还包括条件编译。
头文件为了防止被重复包含,通常的格式是:
/* MyHead.h */
#ifndef _MYHEAD_H_
#define _MYHEAD_H_
(这里是头文件的内容)
#endif /* _MYHEAD_H_ */
希望对你有帮助!
追问
如果函数源文件中需要调用库函数,该如何处理?
我看标准库头文件中常有这样的话:
#ifndef RC_INVOKED
#include
#endif /* NOT RC_INVOKED */

这是什么意思?我需不需要包含类似的语句?多谢
追答
这是一般的格式,最好还是加上
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CKhuaxiang
2014-08-13 · 超过28用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:51.9万
展开全部
跟标准库的头没关系,标准库的头文件随便你包含多少次都不会有问题的。
你把报错的提示给贴上来吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式