下面是代码结构,其中stack
,Queue
,tree
文件夹代码依赖于list
文件夹代码,
../Computing >ls
HashTable list Queue recursion stack tree
list
文件夹在tree/rootedTree
文件夹中重复,不像推荐的方法包含相关的头文件,提到here,
../Computing/tree/rootedTree >ls
lcrsImpl.c list main.c multiWalkImpl.c tree.h
here是rootedTree
文件夹的不完整代码。
为避免List文件夹的代码重复,如何维护代码结构?
答案 0 :(得分:3)
您似乎具有以下结构:
whatever/
list/
...
list.h
...
queue/
... <- some files have an #include "list/list.h";
list/ <- duplicate
tree/
rootedTree/
...
list/ <- duplicate
tree.h <- has an #include "list/list.h";
test.c <- #include "tree.h"
在此代码中,首先转到要编译内容的文件夹,然后在文件夹中编译它们:
you@somewhere:~/whatever/tree/rootedTree$ gcc -Wall -I. -g *.c -o test
#include
语句的路径与从调用编译器的位置有关(只要包含-I.
参数;谢谢,@ jean-françois-fabre)。所以你很可能有以下(非重复)结构:
whatever/
list/
...
list.h
...
queue/
... <- some files have an #include "list/list.h"; no list/ duplicate
tree/
rootedTree/
...
tree.h <- has an #include "list/list.h"; no list/ duplicate
testTree.c <- #includes "tree/rootedTree/tree.h" and others
和来自无论文件夹,你可以写
you@somewhere:~/whatever$ gcc -Wall -I. -g */*.c testTree.c -o testTree
并获取可执行文件进行测试。由于直接调用编译器很无聊,特别是如果您只想编译实际进行更改的代码部分,通常使用某种项目定义文件(Makefile,Scons ,. ..)为你处理。
复制很糟糕,并且(几乎)始终有办法避免它。