头文件中的C函数实现

克里斯蒂安·杜塞特

我正在用C实现一些数据结构,目的是能够轻松地将它们用于将来的项目。一种可行的方法是在头文件中实现每个数据结构。

例如,这是linked_list.h:

#ifndef LINKED_LIST
#define LINKED_LIST

#include <stdlib.h>


typedef struct linked_list_type {
   int val;
   struct linked_list_type* next;
} linked_list;



// Initializes a single node with a value v
linked_list* ll__init(int v) {
  linked_list* new_ll = malloc(sizeof(linked_list));
  new_ll->val = v;
  new_ll->next = NULL;

  return new_ll;
}

// More functions

#endif

这很好用,因为我可以#include "linked_list.h"在以后的项目中使用它来获取linked_list结构及其所有功能。

但是,这违背了仅在头文件中使用声明(而不是实现)的常规做法。所以,我有一些问题:

  1. 有没有更好的方法来获得像这样的容易包含的东西?从一些搜索来看,包含.c文件似乎是一个坏主意。
  2. 我现在正在做的事是否以我未意识到的方式是坏/危险的?
Turix

关于您的第一个问题,标准方法是仅链接代码(以另一个.c文件或静态库的形式)。但是您也可以使用inline所有内容。(不过,对于较大的数据结构,我认为这不是一个好的解决方案。)

关于第二个问题,一个危险是,如果您尝试将已经使用此头文件单独编译的两个(或多个)编译文件链接在一起,则会出现链接器错误。ll_init符号将由每个.o文件定义

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章