我正在写一个简单的c测试框架。为了简单起见,我只提供了一个头文件(包含所有函数定义),但遇到了一些问题。如果我只包含一次标题,一切都会好的。如果我包含头两次,gcc链接器将报告重复符号错误(这是正常的),因此我在头中的每个函数中添加静态前缀。这次它起作用了,但是函数在最后的二进制文件中是重复的。见下文:
[heidong@HEIDONGVM ztest]$ nm m | grep __ct_hex_dump
0000000000400904 t __ct_hex_dump
0000000000401efc t __ct_hex_dump
是否有某种方法使函数只定义一次?
谢谢!!
也许有人需要代码,我刚在github启动了一个项目:https://github.com/buf1024/test
再次感谢!!
最佳答案
你的东西在ct里
static functions
static function definitions
在atest.c中
// This is the first lot of definitions
#include "ct.h"
在main.c中
// This is the second lot of definitions
#include "ct.h"
修复
将静态函数定义移到ct.c,删除static一词
将ct.h中的所有原型从静态更改为外部
在链接中添加ct.c。
编辑:只送ct.h
将ct.h中的所有原型从静态更改为外部
在第一个函数体之前添加__
在最后一个函数之后,添加#endif
告诉用户,在包含main的代码中,他们需要在包含“CT.h”之前定义“CT.C”
任何其他包含“ct.h”的内容都不能定义“ct.C”。
关于c - 头文件中的函数定义(使用gcc的c),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20854355/