gpt4 book ai didi

c - 头文件中的函数定义(c 使用 gcc)

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:07 24 4
gpt4 key购买 nike

我正在编写一个简单的 C 测试框架。为简单起见,我只提供了一个头文件(包含所有函数定义),但我遇到了一些问题。如果我只包含一次标题,一切正常。如果我两次包含 header ,gcc 链接器会报告重复符号错误(这是正常的),因此我在 header 中的每个函数中都添加了静态前缀。这次成功了,但是函数在最终的二进制文件中是重复的。见下文:

    [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.h中

static functions
static function definitions

在atest.c中

// This is the first lot of definitions
#include "ct.h"

在主程序中

// This is the second lot of definitions
#include "ct.h"

修复

  1. 将静态函数定义移动到ct.c,去掉static这个词
  2. 将ct.h中的所有原型(prototype)从static改为extern
  3. 将 ct.c 添加到您的链接。

编辑:只提供 ct.h

  1. 将ct.h中的所有原型(prototype)从static改为extern
  2. 在第一个函数体前添加#ifdef __CT_C__
  3. 在最后一个函数之后,加上#endif
  4. 告诉用户在包含 main 的代码中,他们需要在#include "ct.h"之前#define __CT_C__
  5. #include "ct.h"不得定义 __CT_C__ 的任何其他内容。

关于c - 头文件中的函数定义(c 使用 gcc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20854355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com