我正在用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结构及其所有功能。
但是,这违背了仅在头文件中使用声明(而不是实现)的常规做法。所以,我有一些问题:
关于您的第一个问题,标准方法是仅链接代码(以另一个.c
文件或静态库的形式)。但是您也可以使用inline
所有内容。(不过,对于较大的数据结构,我认为这不是一个好的解决方案。)
关于第二个问题,一个危险是,如果您尝试将已经使用此头文件单独编译的两个(或多个)编译文件链接在一起,则会出现链接器错误。该ll_init
符号将由每个.o
文件定义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句