【发布时间】:2017-12-30 02:53:00
【问题描述】:
我想创建一个使用结构和围绕该结构的函数的程序,例如树。
界面类似于:
typedef struct _trie *Trie;
void foo1(Trie trie);
int foo2(Trie trie);
...
我想为此创建两个实现,它们将位于以下文件中:
- first_trie.c、first_trie.h
- second_trie.c、second_trie.h
使用界面的第三个文件:
- use_trie.c
目标是编译 use_trie.c 两次,一次使用 second_trie.h,另一次使用 first_trie.h。
如何防止use_trie抱怨不知道Trie? 如何构建一个使用那些不同的标头构建两次 use_trie 的 makefile?
【问题讨论】:
-
如果两个实现有相同的接口,你只需要一个
.h文件。编译是通过文件完成的,所以你只需要担心链接。 -
他会抱怨不知道 _trie 因为它在其他文件中
-
@Pixeuh:你需要设计界面让
.h文件拥有主文件所需的一切。 -
谨防使用以下划线开头的名称。 C11 §7.1.3 Reserved identifiers 说: • 所有以下划线和大写字母或另一个下划线开头的标识符始终保留以供任何使用。 — • 所有以下划线开头的标识符始终保留用于在普通名称空间和标记名称空间中用作具有文件范围的标识符。您正在使用
struct _trie踩在薄冰上。不过,你会和很多其他人在一起;人们经常滥用这些规则。 -
顺便说一句,在类型中隐藏指针的品味很差。我更喜欢
typedef struct trie_st MyTrie;然后void foo1(MyTrie* trie);因为你想在函数声明中显示指针参数。
标签: c makefile header-files