aboutsummaryrefslogtreecommitdiff

cminus

Librarie utilitaire pour de la programmation de jeux ergonomique en C23.

Conçu pour être utilisé appairé avec mon framework TZR.

utilisation

Ajoutez .c et .h à votre projet.

Utilisez l'option -include_.h pour inclure _.h dans tous vos fichiers automatiquement.

Vous aurez besoin du flag -std=c2x, cminus étant écrit pour le dernier standard C disponible.

types

Les types suivants sont définis :

u8    -> uint8_t
u16   -> uint16_t
u32   -> uint32_t
u64   -> uint64_t
usize -> size_t
i8    -> int8_t
i16   -> int16_t
i32   -> int32_t
i64   -> int64_t
isize -> ssize_t
f32   -> float
f64   -> double

mémoire

cminus redéfinit malloc, calloc, realloc et free afin de gérer les leaks et erreurs automatiquement.

Appelez void wdeinit() pour automatiquement libérer toute la mémoire utilisée.

int main() {
    defer(wdeinit);

    for (;;)
        realloc(malloc(1000), 10000); // pas de gestion d'erreur !

    // pas de leak !
    return 0;
}

logging

cminus ajoute les fonctions utilitaires plog, perr, pwrn pour du "debug printf" maintenable. panic est également disponible, affichant un message avant d'exit(1).

int main() {
    plog("début de l'exécution");
    if (SDL_Init(SDL_INIT_VIDEO) < 0)
        panic("SDL_Init a fail"); // l'exécution se termine ici
    defer(SDL_Quit);
    plog("fin de l'exécution");
    return 0;
}

assert

Si la condition donnée à assert est fausse, une erreur est affichée et l'exécution se termine.

FILE *fp = fopen("salut", "rb");
assert(fp != nullptr);
fclose(fp);

defer

Donnez une fonction avec signature void fn(void) à defer et elle sera automatiquement appelée à la sortie du programme (return du main ou exit).

int main() {
    defer(wdeinit);
    assert(SDL_Init(SDL_INIT_VIDEO) == 0);
    defer(SDL_Quit);

    // faites votre vie...

    return 0; // le cleanup est automatique ! wow
}

boucles

foreach

foreach peut être utilisé afin de parcourir facilement des listes chainées

foreach (e, root)
    plog("%p", e->data);
// s'étend en :
for (auto e = root; e != nullptr; e = e->next)
    plog("%p", e->data);

rfor

rfor est une manière courte d'écrire une boucle for à incrémentation basique.

rfor (i, 4u, 42)
    plog("%u", i);
// s'étend en :
for (auto i = 0u; i < 42; i++)
    plog("%u", i);

repeat

repeat est une version courte du commun for (int i = 0; i < X; i++)

repeat (i, 100u)
    plog("%u", i);
// s'étend en :
for (unsigned i = 0; i < 100u; i++)
     plog("%u", i);

with

Dangereux, lisez les sources si vous voulez le comprendre. Je veux pas être responsable de son utilisation.

mathématiques

cminus ajoute quelques macros utilitaires (max, min et appr parmis d'autres) ainsi que des vecteurs et matrices, lisez _.h pour des détails.