Bibliotecas em C


GitHub DaviAMSilva/Estruturas_de_Dados GitHub DaviAMSilva/Searches GitHub DaviAMSilva/Sorts

Essas bibliotecas se referem a três conjuntos de funções e tipos de dados que eu desenvolvi enquanto estava cursando o curso de Ciência da Computação na Doctum para acelerar o desenvolvimentos das atividades. Esses projetos são:

  • Estruturas de Dados:

    Contém as estruturas de dados do tipo pilha, fila e lista e métodos para criar, acessar e modificar tais estruturas. O tipo de dado armazenado nessas estruturas é dinâmico e definido pelo usuário.

  • Searches:

    Contém diversos algoritmos de pesquisa em tipos de dados quaisquer, definidos pelo usuário.

  • Sorts:

    Contém diversos algoritmos de ordenação em tipos de dados quaisquer, definidos pelo usuário.

Eu criei essas bibliotecas durante os semestres em que cada um desses tópicos foi apresentado na faculdade. Minha principal motivação é que bem no início eu percebi o quanto eu reutilizava código pois atividades diferentes requeriam as mesmas estruturas, apenas a situação da atividade eram alteradas. Por causa disso, apesar de essas bibliotecas não terem muito utilidade prática no mundo externo, para mim elas foram de uma ajuda enorme.

A maneira como elas funcionam em geral é que elas permitem o uso de qualquer tipo de dados por meio de alocação dinâmica e conversão de ponteiros. O usuário apenas precisa definir o tamanho do tipo de dados no início e definir as funções necessárias para interagir com as bibliotecas utilizando os mesmos tipos de dados definidos.

Além disso outra vantagem é que as bibliotecas foram feitas de tal forma que o código fonte podia ser copiado para cada atividade necessária e continha um makefile para compilar cada arquivo para um arquivo de biblioteca estática (extensão .a) que poderia ser importada para os arquivos próprios da atividade por meio de outro makefile.

DIRS    := build/ lib/
SOURCES := $(wildcard source/*.c)
OBJECTS := $(patsubst source/%.c,build/%.o,$(SOURCES))
LIBS    := $(patsubst source/%.c,lib/lib%.a,$(SOURCES))

all: $(LIBS)
dirs: $(DIRS)

.PHONY: all dirs clean
.SECONDARY: $(OBJECTS)

build/%.o: source/%.c include/%.h | $(DIRS)
    gcc -c $< -Wall -O3 -o $@ -I include/

lib/lib%.a: build/%.o | $(DIRS)
    ar cr $@ $<

$(DIRS):
    mkdir -p $@

clean:
    rm -fr build/ lib/
.PHONY: all clean eds
all: $(patsubst %.c,bin/%,$(wildcard *.c))


libs := lista pilha
args := -Ieds/include -Leds/lib $(addprefix -l,$(libs))


bin/%: %.c | bin eds
    gcc $^ $(args) -O3 -Wall -Wno-unused-result -Wno-discarded-qualifiers -o $@


bin:
    mkdir -p bin/


eds:
    $(MAKE) -C eds


clean:
    rm -fr bin/