1
1
mirror of https://github.com/theoludwig/libcproject.git synced 2024-11-08 22:31:31 +01:00
C static library for learning purposes. Implement useful functions/data structures while being easier to use than libc (C standard library). https://libcproject.vercel.app/
Go to file
Théo LUDWIG 72645da4b2
perf: mutate strings instead of copy when possible
BREAKING CHANGE: Most of string functions mutates the string instead of copying now.
This allows better performance when copy is not needed.
It also allows more granual control.
If copy is wanted, simply use `string_copy` before calling the function.

Impacted functions are:
`string_to_uppercase`, `string_to_lowercase`, `string_replace`,
`string_trim_start`, `string_trim_end`, `string_trim`,
`string_capitalize`, `string_reverse`
2023-08-06 23:17:07 +02:00
.github chore: update @since version 2023-08-05 15:03:53 +02:00
doxygen-awesome-css@df83fbf22c build(deps): update doxygen-awesome-css to v2.2.1 2023-06-24 20:44:48 +02:00
lib perf: mutate strings instead of copy when possible 2023-08-06 23:17:07 +02:00
test perf: mutate strings instead of copy when possible 2023-08-06 23:17:07 +02:00
.clang-format chore: initial commit 2023-01-05 19:28:05 +01:00
.commitlintrc.json chore: add commitlint 2023-01-05 21:18:49 +01:00
.editorconfig feat: first release 2023-01-05 21:13:10 +01:00
.gitattributes feat: first release 2023-01-05 21:13:10 +01:00
.gitignore chore: update @since version 2023-08-05 15:03:53 +02:00
.gitmodules feat: generate documentation 2023-01-06 16:32:29 +01:00
.releaserc.json chore: remove .exe file extension to be more "linux way" 2023-06-25 20:17:28 +02:00
CODE_OF_CONDUCT.md fix: update author - Théo LUDWIG 2023-06-24 20:29:30 +02:00
CONTRIBUTING.md docs: fix doxygen warnings 2023-06-25 21:32:16 +02:00
Doxyfile docs: fix doxygen warnings 2023-06-25 21:32:16 +02:00
DoxygenLayout.xml feat: generate documentation 2023-01-06 16:32:29 +01:00
libcproject.h feat!: remove dictionary data structure 2023-06-25 20:09:07 +02:00
LICENSE fix: update author - Théo LUDWIG 2023-06-24 20:29:30 +02:00
main.c perf: mutate strings instead of copy when possible 2023-08-06 23:17:07 +02:00
Makefile chore: only use sanitizer flags in test 2023-08-05 15:33:19 +02:00
README.md perf: mutate strings instead of copy when possible 2023-08-06 23:17:07 +02:00
set_version.c fix: more memory issues thanks to -fsanitize=address flag 2023-08-03 23:55:14 +02:00
version.h chore(release): 3.1.0 [skip ci] 2023-08-06 14:43:01 +00:00

libcproject

C static library easier to use than `libc` (C standard library).

Licence MIT Contributor Covenant
Conventional Commits semantic-release

About

libcproject is a C static library for learning purposes. It tries to implement useful functions/data structures while being easier to use than libc (C standard library) as much as possible.

C is a low-level programming language and we often end up reinventing the wheel as the C standard library (libc) is quite small and in my humble opinion, not well designed.

libcproject solve this by providing common functions or data structures (hash_map, array_list, linked_list, queue, stack, etc.), we might need in our C projects.

Online documentation.

Prerequisites

For example on GNU/Linux Ubuntu:

# Install Build Tools
sudo apt-get install build-essential gcc make clang-format

# Install Documentation Tools
sudo apt-get install doxygen doxygen-gui doxygen-doc graphviz

Usage

make # to compile
make run # to run main
make test # to run unit tests
make lint # to lint the code
make documentation # to generate the documentation
make clean # to clean up

nm ./build/libcproject.a # to see the symbols

Steps to create a new C project that uses libcproject:

Step 1: Create a new project

mkdir my-project
cd my-project

Step 2: Install and Compile libcproject in the project

# Clone the repository
git clone git@github.com:theoludwig/libcproject.git

# Go to libcproject directory
cd libcproject

# Compile the library
make

Step 3: Create a new C file

cd ..
touch main.c
#include <stdio.h>
#include <stdlib.h>

#include "libcproject/libcproject.h"

int main() {
  string_t string = "Hello, world!"; // `string_t` is a typedef from `libcproject`
  printf("%s\n", string);
  printf("string_length = %ld\n", string_get_length(string)); // `string_get_length` is a function from `libcproject`
  return EXIT_SUCCESS;
}
gcc -o ./main ./main.c -L. -l:./libcproject/build/libcproject.a

💡 Contributing

Anyone can help to improve the project, submit a Feature Request, a bug report or even correct a simple spelling mistake.

The steps to contribute can be found in the CONTRIBUTING.md file.

📄 License

MIT