Я учусь программировать на C и столкнулся со следующей проблемой.У меня есть некоторые частные вспомогательные функции, которые я бы не хотел нигде показывать.Вот как выглядят исходные файлы:
logic.h
:
#ifndef LOGIC_H
#define LOGIC_H
enum logic_type{
customer_logic = 1,
requestor_logic,
company_logic
}
void execute_logic(enum logic_type logic_type);
#endif //LOGIC_H
logic.c
:
#include "logic.h"
static void _execute_customer_logic();
static void _execute_requestor_logic();
static void _execute_company_logic();
void execute_logic(enum logic_type logic_type){
switch(logic_type){
case customer_logic:
_execute_customer_logic();
break;
case requestor_logic:
_execute_requestor_logic();
break;
case company_logic:
_execute_company_logic();
break;
}
}
void _execute_customer_logic(){
//very long and complicated function
}
void _execute_requestor_logic(){
//very long and complicated function
}
void _execute_company_logic(){
//very long and complicated function
}
С текущим дизайном это выглядит очень грязно.Поэтому я думал о том, чтобы поместить каждую логику в отдельный частный заголовочный файл, а затем просто включить его.Как
company_logic_internal.h
:
#ifndef COMPANY_LOGIC_INTERNAL_H
#define COMPANY_LOGIC_INTERNAL_H
void _execute_company_logic(){
//very long and complicated function
}
#endif //COMPANY_LOGIC_INTERNAL_H
Проблема заключается в том, что я помещаю реализацию в файл заголовка, который выглядит противоречащим определению файлов заголовка, который содержит прототипы функций, но не фактическиеопределение.Создание company_logic.h
в качестве company_logic.c
также выглядит странно, поскольку это означает, что файл .c
будет включен.
Так что я не совсем понимаю, как реализовать такую вещь лучше.