Communitygithub.com

JantonioFC/skillsbank

Super-lignes directrices spécifiques au langage C.

Qu'est-ce que skillsbank ?

Ce skill fournit un guide de style idiomatique et efficace pour le langage C, destiné aux développeurs travaillant avec des agents IA comme Claude Code, Cursor ou Codex. Il couvre les pratiques essentielles pour une gestion mémoire sûre (vérification de malloc, libération des chemins de retour anticipé, utilisation de `sizeof *ptr`), la manipulation des pointeurs et tableaux (passage de taille avec pointeur, indiçage plutôt qu'arithmétique), la gestion des erreurs par codes nommés et `goto cleanup` pour le déroulement des ressources, les chaînes de caractères avec `snprintf` et `strncpy`, les structures et énumérations typées, ainsi que les macros et en-têtes avec gardes d'inclusion. Il liste également les anti-patrons spécifiques au C (comme `sprintf` vs `snprintf`, `gets` vs `fgets`, ou le typage inconsistant). Ce skill améliore la qualité et la maintenabilité du code C généré par l'IA en imposant des conventions robustes et performantes. Il est compatible avec tous les agents supportant l'intégration de compétences via une fiche markdown.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JantonioFC/skillsbank/tree/HEAD/skills/c

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

C : Référence idiomatique et efficace

Table des matières

  1. Gestion mémoire
  2. Pointeurs et tableaux
  3. Gestion d'erreurs
  4. Chaînes de caractères
  5. Structures et énumérations
  6. Préprocesseur et en-têtes
  7. Anti-patrons spécifiques au C

1. Gestion mémoire {#memoire}

// ❌ malloc sans vérifier la valeur de retour
char *buf = malloc(size);
strcpy(buf, src);

// ✅
char *buf = malloc(size);
if (!buf) return -ENOMEM;
memcpy(buf, src, size);
// ❌ Cast du résultat de malloc (inutile en C, cache l'inclusion manquante)
int *p = (int *)malloc(n * sizeof(int));

// ✅
int *p = malloc(n * sizeof *p);
// ❌ free sans mettre à NULL (risque de pointeur pendant dans une portée longue)
free(ptr);
// ... du code ultérieur pourrait utiliser ptr

// ✅
free(ptr);
ptr = NULL;
// ❌ Oubli de libérer sur les chemins de retour anticipé
char *a = malloc(100);
char *b = malloc(200);
if (!b) return -1; // fuite de a

// ✅ — une seule étiquette de nettoyage
char *a = NULL, *b = NULL;
a = malloc(100);
if (!a) goto nettoyage;
b = malloc(200);
if (!b) goto nettoyage;
// ... utiliser a, b ...
nettoyage :
    free(b);
    free(a);

Utilisez sizeof *ptr au lieu de sizeof(Type) — cela reste correct lorsque le type change.


2. Pointeurs et tableaux {#pointeurs}

// ❌ Suivi manuel de la taille du tableau
void traiter(int *arr, int len) { ... }
traiter(donnees, 10);

// ✅ — passer la taille avec le pointeur, ou utiliser une structure
typedef struct { int *donnees; size_t len; } TrancheInt;
// ❌ Arithmétique de pointeurs alors que l'indiçage de tableau est plus clair
*(arr + i) = valeur;

// ✅
arr[i] = valeur;
// ❌ VLA dans du code de production (risque de débordement de pile, optionnel en C11+)
int arr[n];

// ✅
int *arr = malloc(n * sizeof *arr);
if (!arr) return -ENOMEM;
// ... utiliser arr ...
free(arr);

3. Gestion d'erreurs {#erreurs}

// ❌ Utilisation de nombres magiques pour les retours d'erreur
if (faire_quoi() == -1) { ... }

// ✅ — définir ou utiliser des codes d'erreur nommés
#include <errno.h>
if (faire_quoi() < 0) {
    perror("faire_quoi");
    return errno;
}
// ❌ Vérifications d'erreur profondément imbriquées
int r1 = etape1();
if (r1 == 0) {
    int r2 = etape2();
    if (r2 == 0) {
        int r3 = etape3();
        // ...
    }
}

// ✅ — retour anticipé / goto nettoyage
if (etape1() < 0) goto echec;
if (etape2() < 0) goto echec;
if (etape3() < 0) goto echec;
return 0;
echec :
    nettoyer();
    return -1;

goto nettoyage est un idiome C pour la libération de ressources — ne l'évitez pas par principe.


4. Chaînes de caractères {#chaines}

// ❌ strcpy sans vérification de bornes
strcpy(dest, src);

// ✅
strncpy(dest, src, sizeof(dest) - 1);
dest[sizeof(dest) - 1] = '\0';
// ou mieux : snprintf(dest, sizeof(dest), "%s", src);
// ❌ Mauvaise utilisation de strcmp
if (str == "bonjour") { ... } // compare les pointeurs, pas le contenu

// ✅
if (strcmp(str, "bonjour") == 0) { ... }
// ❌ Construction de chaînes avec strcat répété (O(n²))
char resultat[1024] = "";
for (int i = 0; i < n; i++) {
    strcat(resultat, elements[i]);
}

// ✅ — suivre la position d'écriture
char resultat[1024];
int pos = 0;
for (int i = 0; i < n && pos < (int)sizeof(resultat); i++) {
    pos += snprintf(resultat + pos, sizeof(resultat) - pos, "%s", elements[i]);
}

Préférez snprintf à sprintf — toujours.


5. Structures et énumérations {#structures}

// ❌ Structure nue nécessitant le mot-clé `struct` partout
struct point { int x, y; };
struct point p = {1, 2};

// ✅
typedef struct { int x, y; } Point;
Point p = {1, 2};
// ❌ Structure non initialisée
Point p;
utiliser(p.x); // comportement indéfini

// ✅
Point p = {0};
// ❐ Constantes entières magiques
if (etat == 3) { ... }

// ✅
typedef enum { ETAT_INACTIF, ETAT_EN_COURS, ETAT_TERMINE } Etat;
if (etat == ETAT_TERMINE) { ... }

6. Préprocesseur et en-têtes {#preprocesseur}

// ❌ Macro alors qu'une fonction inline fonctionne (pas de sécurité de type, double évaluation)
#define MAX(a, b) ((a) > (b) ? (a) : (b))
MAX(x++, y) // x incrémenté deux fois si x > y

// ✅
static inline int max_int(int a, int b) { return a > b ? a : b; }
// ❌ Pas de garde d'inclusion
// mon_en_tete.h
struct Foo { int x; };

// ✅
#ifndef MON_EN_TETE_H
#define MON_EN_TETE_H
struct Foo { int x; };
#endif
// ou : #pragma once (largement supporté, pas standard)

Réservez les macros pour la compilation conditionnelle et les constantes. Utilisez static inline pour la logique.


7. Anti-patrons spécifiques au C {#antipatrons}

Anti-patronPréféré
sprintfsnprintf avec taille de tampon
getsfgets (gets supprimé en C11)
Caster le résultat de malloclaisser la conversion implicite void* fonctionner
sizeof(Type) dans mallocsizeof *ptr
VLA pour les grands tableaux/dynamiquesallocation sur le tas
Callbacks void* sans paramètre de contextepasser void *ctx avec le pointeur de fonction
État mutable globalpasser l'état via des pointeurs de structure
assert pour la gestion des erreurs à l'exécutioncodes de retour d'erreur appropriés
const manquant sur les paramètres pointeur en lecture seuleconst char *str
Mélange signé/non signé dans les comparaisonsutiliser des types cohérents, caster explicitement

Limites

  • Ce sont des directives spécifiques au langage et ne couvrent pas les décisions architecturales globales.
  • Une trop grande compression peut réduire la lisibilité ; faites preuve de discernement.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

JantonioFC/skillsbank

AI-powered image editing with style transfer and object removal

JantonioFC/skillsbank

Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support.

JantonioFC/skillsbank

Analise e auditoria de editais de leilao judicial e extrajudicial. Riscos ocultos, clausulas perigosas, debitos, ocupante e classificacao da oportunidade.

JantonioFC/skillsbank

Embed Photopea in web apps using photopea.js. Covers embedding, file I/O, scripting, exporting, layers, text, filters, and the full Photoshop-compatible API.

JantonioFC/skillsbank

Best practices for Remotion - Video creation in React

JantonioFC/skillsbank

Generate walkthrough videos from Stitch projects using Remotion with smooth transitions, zooming, and text overlays

JantonioFC/skillsbank

Seek and analyze video content using Memories.ai Large Visual Memory Model for persistent video intelligence

JantonioFC/skillsbank

Writes complete, structured landing pages optimized for SEO ranking, AEO citation, and visitor conversion. Activate when the user wants to write or generate a landing page for a product, service, or offer.

JantonioFC/skillsbank

Video and audio perception, indexing, and editing. Ingest files/URLs/live streams, build visual/spoken indexes, search with timestamps, edit timelines, add overlays/subtitles, generate media, and create real-time alerts.

JantonioFC/skillsbank

Upload, stream, search, edit, transcribe, and generate AI video and audio using the VideoDB SDK.

JantonioFC/skillsbank

Skill for discovering and researching autonomous AI agents, tools, and ecosystems using the AgentFolio directory.

JantonioFC/skillsbank

Expert in building portfolios that actually land jobs and clients - not just showing work, but creating memorable experiences. Covers developer portfolios, designer portfolios, creative portfolios, and portfolios that convert visitors into opportunities.

JantonioFC/skillsbank

Tool lifecycle UI components for React/Next.js from ui.inference.sh. Display tool calls: pending, progress, approval required, results. Capabilities: tool status, progress indicators, approval flows, results display. Use for: showing agent tool calls, human-in-the-loop approvals, tool output. Triggers: tool ui, tool calls, tool status, tool approval, tool results, agent tools, mcp tools ui, function calling ui, tool lifecycle, tool pending

JantonioFC/skillsbank

Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.

JantonioFC/skillsbank

When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' 'audience targeting,' 'Google Ads,' 'Facebook ads,'...

JantonioFC/skillsbank

Create AI avatar and talking head videos with OmniHuman, Fabric, PixVerse via inference.sh CLI. Models: OmniHuman 1.5, OmniHuman 1.0, Fabric 1.0, PixVerse Lipsync. Capabilities: audio-driven avatars, lipsync videos, talking head generation, virtual presenters. Use for: AI presenters, expla...

JantonioFC/skillsbank

Create AI marketing videos for ads, promos, product launches, and brand content. Models: Veo, Seedance, Wan, FLUX for visuals, Kokoro for voiceover. Types: product demos, testimonials, explainers, social ads, brand videos. Use for: Facebook ads, YouTube ads, product launches, brand awarene...

JantonioFC/skillsbank

Generate AI videos with Google Veo, Seedance, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 1.5 Pro, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, lipsync, avatar animation, video upscaling, fole...

JantonioFC/skillsbank

Production-ready CI/CD configurations for Playwright — GitHub Actions, GitLab CI, CircleCI, Azure DevOps, Jenkins, Docker, parallel sharding, reporting, code coverage, and global setup/teardown.

JantonioFC/skillsbank

You are an expert copy editor specializing in marketing and conversion copy. Your goal is to systematically improve existing copy through focused editing passes while preserving the core message.

Skills associés