分离公共代码并放置公共 headers

Separating common code and placing common headers

我发现两个相互矛盾的答案如何处理常见的包含 (one, two),所以我决定描述我的案例...

我有一个小项目,最初包含4个小应用程序。 假设我有文件 A.c、B.c、C.c 和 D.c。为了改善代码状态,我决定将公共源代码分开。我创建了 Common.h 和 Common.c。现在每个应用程序都依赖于 Common.o。请检查以下 makefile:

OBJ := $(OBJDIR)/A.o $(OBJDIR)/B.o $(OBJDIR)/C.o $(OBJDIR)/D.o
HEADERS := $(SRCDIR)/common.h
MODULES := $(BUILDDIR)/A $(BUILDDIR)/B $(BUILDDIR)/C $(BUILDDIR)/D


all: dir $(OBJ) $(MODULES)
dir :
    mkdir -p $(BUILDDIR)
$(BUILDDIR)/A : $(OBJDIR)/A.o $(OBJDIR)/common.o
    $(CC) $^ -o $@ $(CFLAGS)
$(BUILDDIR)/B : $(OBJDIR)/B.o $(OBJDIR)/common.o
    $(CC) $^ -o $@ $(CFLAGS)
$(BUILDDIR)/C : $(OBJDIR)/C.o $(OBJDIR)/common.o
    $(CC) $^ -o $@ $(CFLAGS)
$(BUILDDIR)/D : $(OBJDIR)/D.o $(OBJDIR)/common.o
    $(CC) $^ -o $@ $(CFLAGS)
$(OBJDIR)/%.o : $(SRCDIR)/%.c $(HEADERS)
    $(CC) -c $< -o $@ $(CFLAGS)
.PHONY: clean
clean:
    rm -rf $(BUILDDIR)

我在每个文件 *.c 中包含:#include<stdio.h>, #include <stdlib.h>, #include <string.h> 我应该将这些包含分别保存在每个 .c 文件中吗?或者把它放在 common.h 中是好习惯吗?

在我看来,我可以将这些 headers 保留在 common.h 中,因为每个应用程序都依赖于 common.o。这是一个正确的方法吗?在 A.c、B.c、C.c、D.c 和 Common.c 中需要 stdlib.h、stdio.h 和 string.h( Common.h 的声明不需要这些文件中的任何一个),但是将它们放在 common.h 中并且不将它们包含在每个 .c 文件中是合乎逻辑的......这种方法正确吗?

总结:如果在每个.c文件中我都有malloc(在common.c中也是),我可以把#include <stdlib.h>只放在[=34=中吗? ] 然后在所有 .c 文件中包含 common.h?

我正在关闭这个问题。感谢您在评论中的所有回答。 总结:

A rule of thumb (which is not necessarily the only one that has to exist) is that you include the immediate dependencies where these are needed without relying on indirect inclusion.