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>,举个例子,剩下的部分我照葫芦画瓢就好了。多谢! 展开
我目前完成的一个包含库函数的C文件中的函数需要stdio.h, stdlib.h和string.h的函数。因此我在相应的头文件中将这三个标准库include了。结果编译时出现了“重复定义”的报错。
我知道这是由于main中也include了stdio.h和stdlib.h,这两个库被include了两遍。因此我查看了编译器目录下的标准库头文件,但由于不懂那些带下划线的标准宏是什么意思,没太看懂。但我看它的大致思路是条件编译。
希望有这方面经验的诸位给我做个示范,我不想麻烦大家,只要帮我讲一下该如何在头文件中include <stdlib.h>,举个例子,剩下的部分我照葫芦画瓢就好了。多谢! 展开
4个回答
展开全部
首先,要明白一点。标准库的头文件多次include是不会发生重定义的错误的。所有的标准库文件的内容都是如这般写的:
#ifndef STDLIB_H
#define STDLIB_H
...
#endif
这保证了它的内容只会被引用一次。所以要include,只写一句
#include <stdlib.h>
就可以了。
另外,你自己的头文件最好也加上上面所示的那种保卫宏,以防多次引用你自己的头文件出现重定义。
你说的重复定义,可能是另外一个问题。你说你自己做了一个库,如果你是用 Visual C 建工程生成的 lib 库文件,要注意项目属性里有一个 ”/Mt“ "/Md" 的选项。请保证选的是后者,否则你的库文件中会有一套标准库的函数的实现,而使用你的库编译其他程序的时候,又会再次连接系统库,如此便会产生重定义。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "MyHead.h"
来包含。
头文件是不编译的,因为C语言编译过程之前有个预编译过程。在这个过程中用头文件中的内容替换源文件中“#include”命令,所以在编译器看来,没有头文件,只有源文件。预编译过程还包括条件编译。
头文件为了防止被重复包含,通常的格式是:
/* MyHead.h */
#ifndef _MYHEAD_H_
#define _MYHEAD_H_
(这里是头文件的内容)
#endif /* _MYHEAD_H_ */
希望对你有帮助!
来包含。
头文件是不编译的,因为C语言编译过程之前有个预编译过程。在这个过程中用头文件中的内容替换源文件中“#include”命令,所以在编译器看来,没有头文件,只有源文件。预编译过程还包括条件编译。
头文件为了防止被重复包含,通常的格式是:
/* MyHead.h */
#ifndef _MYHEAD_H_
#define _MYHEAD_H_
(这里是头文件的内容)
#endif /* _MYHEAD_H_ */
希望对你有帮助!
追问
如果函数源文件中需要调用库函数,该如何处理?
我看标准库头文件中常有这样的话:
#ifndef RC_INVOKED
#include
#endif /* NOT RC_INVOKED */
这是什么意思?我需不需要包含类似的语句?多谢
追答
这是一般的格式,最好还是加上
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
跟标准库的头没关系,标准库的头文件随便你包含多少次都不会有问题的。
你把报错的提示给贴上来吧。
你把报错的提示给贴上来吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询