Разделение общего кода и размещение общих заголовков - PullRequest
1 голос
/ 23 января 2020

Я нашел два противоречивых ответа о том, как обращаться с общими включает ( один , два ), поэтому я решил описать мой случай ...

У меня есть небольшой проект, который изначально содержит 4 небольших приложения. Предположим, у меня есть файлы A. c, B. c, C. c и D. c. Чтобы улучшить состояние кода, я решил разделить общий исходный код. Я создал Common.h и Common. c. Каждое приложение теперь зависит от Common.o. Пожалуйста, проверьте ниже make-файл:

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, потому что каждое приложение зависит от common.o. Это правильный подход? stdlib.h, stdio.h и string.h необходимы в A. c, B. c, C. c, D. c и Common. c (декларации Common. h не требует никаких этих файлов), но помещать их в файл common.h и не включать их в каждый файл. c логично ... правильный ли этот подход?

резюме : если в каждом файле. c у меня есть mallo c (в общем. c тоже), могу ли я поместить #include <stdlib.h> только в common.h и затем включить common.h во все файлы. c ?

1 Ответ

0 голосов
/ 31 января 2020

Я закрываю этот вопрос. Спасибо за все ответы в комментариях. Подводя итог:

Практическое правило (которое не обязательно является единственным, которое должно существовать) заключается в том, что вы включаете непосредственные зависимости, где они необходимы, не полагаясь на косвенное включение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...