我想写个自己的库函数以便在源码开头用#include "XXX.h"调用。
我目前完成的一个包含库函数的C文件中的函数需要stdio.h, stdlib.h和string.h的函数。因此我在相应的头文件中将这三个标准库include了。结果编译时出现了“重复定义”的报错。
我知道这是由于main中也include了stdio.h和stdlib.h,这两个库被include了两遍。因此我查看了编译器目录下的标准库头文件,但由于不懂那些带下划线的标准宏是什么意思,没太看懂。但我看它的大致思路是条件编译。
希望有这方面经验的诸位给我做个示范,我不想麻烦大家,只要帮我讲一下该如何在头文件中include <stdlib.h>,举个例子,剩下的部分我照葫芦画瓢就好了。多谢!
首先,要明白一点。标准库的头文件多次include是不会发生重定义的错误的。所有的标准库文件的内容都是如这般写的:
#ifndef STDLIB_H这保证了它的内容只会被引用一次。所以要include,只写一句
#include <stdlib.h>就可以了。
另外,你自己的头文件最好也加上上面所示的那种保卫宏,以防多次引用你自己的头文件出现重定义。
你说的重复定义,可能是另外一个问题。你说你自己做了一个库,如果你是用 Visual C 建工程生成的 lib 库文件,要注意项目属性里有一个 ”/Mt“ "/Md" 的选项。请保证选的是后者,否则你的库文件中会有一套标准库的函数的实现,而使用你的库编译其他程序的时候,又会再次连接系统库,如此便会产生重定义。
追问如果函数源文件中需要调用库函数,该如何处理?
我看标准库头文件中常有这样的话:
#ifndef RC_INVOKED
#include
#endif /* NOT RC_INVOKED */
这是什么意思?我需不需要包含类似的语句?多谢
这是一般的格式,最好还是加上
本回答被提问者和网友采纳