Загрузка данных


#include "print_module.h"

#include <stdio.h>
#include <time.h>

int print_char(char ch) { return putchar(ch); }

void print_log(int (*print)(char), char *message) {
    time_t current_time = time(NULL);
    struct tm *local_time = localtime(&current_time);
    char buffer[9];

    if (local_time != NULL) {
        strftime(buffer, sizeof(buffer), "%H:%M:%S", local_time);

        print_string(print, Log_prefix);
        print_string(print, " ");
        print_string(print, buffer);
        print_string(print, " ");
        print_string(print, message);
    }
}

void print_string(int (*print)(char), const char *string) {
    for (int i = 0; string[i] != '\0'; i++) {
        print(string[i]);
    }
}


#ifndef PRINT_MODULE_H
#define PRINT_MODULE_H

#define Module_load_success_message "Output stream module load: success\n"
#define Log_prefix "[LOG]"

void print_log(int (*print)(char), char *message);
int print_char(char ch);
void print_string(int (*print)(char), const char *string);

#endif


#include <stdio.h>

#include "print_module.h"

int main(void) {
    print_log(print_char, Module_load_success_message);

    return 0;
}


CC = gcc
CFLAGS = -Wall -Wextra -Werror -std=c11
BUILD_DIR = ../build

.PHONY: all clean rebuild door_struct list_test stack_test print_module

all: door_struct list_test stack_test print_module

$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

door_struct: $(BUILD_DIR)
	$(CC) $(CFLAGS) dmanager_module.c -o $(BUILD_DIR)/Quest_1

list_test: $(BUILD_DIR)
	$(CC) $(CFLAGS) list.c list_test.c -o $(BUILD_DIR)/Quest_2

stack_test: $(BUILD_DIR)
	$(CC) $(CFLAGS) stack.c stack_test.c -o $(BUILD_DIR)/Quest_3

print_module: $(BUILD_DIR)
	$(CC) $(CFLAGS) print_module.c main_module_entry_point.c -o $(BUILD_DIR)/Quest_4

clean:
	rm -rf $(BUILD_DIR)

rebuild: clean all