Communitygithub.com

JantonioFC/skillsbank

Diretrizes de codificação super específicas para a linguagem C.

O que é skillsbank?

Este skill fornece um conjunto de diretrizes idiomáticas e eficientes para programação em C, cobrindo desde gerenciamento de memória e tratamento de erros até o uso correto de ponteiros, strings, structs e pré-processador. Ele foi projetado para ajudar desenvolvedores a evitar armadilhas comuns e seguir as melhores práticas da linguagem, resultando em código mais seguro, legível e de fácil manutenção. O recurso é útil tanto para iniciantes quanto para programadores experientes que desejam padronizar seu estilo de codificação em C. As recomendações são apresentadas com exemplos de código que mostram práticas incorretas e suas correções, além de incluir uma seção dedicada a antipadrões específicos da linguagem. Embora focado em C, o skill não aborda decisões arquiteturais de alto nível, servindo como um guia de referência rápido para o dia a dia.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

C: Referência de Eficiência Idiomática

Sumário

  1. Gerenciamento de Memória
  2. Ponteiros e Arrays
  3. Tratamento de Erros
  4. Strings
  5. Structs e Enums
  6. Pré-processador e Headers
  7. Antipadrões específicos de C

1. Gerenciamento de Memória {#memoria}

// ❌ malloc sem verificar o valor retornado
char *buf = malloc(size);
strcpy(buf, src);

// ✅
char *buf = malloc(size);
if (!buf) return -ENOMEM;
memcpy(buf, src, size);
// ❌ Cast do resultado de malloc (desnecessário em C, esconde falta de #include)
int *p = (int *)malloc(n * sizeof(int));

// ✅
int *p = malloc(n * sizeof *p);
// ❌ free sem anular o ponteiro (risco de dangling pointer em escopo de longa duração)
free(ptr);
// ... código posterior pode usar ptr

// ✅
free(ptr);
ptr = NULL;
// ❌ Esquecer de liberar memória em caminhos de retorno antecipado
char *a = malloc(100);
char *b = malloc(200);
if (!b) return -1; // vaza a

// ✅ — rótulo único de limpeza
char *a = NULL, *b = NULL;
a = malloc(100);
if (!a) goto cleanup;
b = malloc(200);
if (!b) goto cleanup;
// ... usar a, b ...
cleanup:
    free(b);
    free(a);

Use sizeof *ptr em vez de sizeof(Tipo) — permanece correto quando o tipo muda.


2. Ponteiros e Arrays {#ponteiros}

// ❌ Rastreamento manual do tamanho do array
void process(int *arr, int len) { ... }
process(data, 10);

// ✅ — passar tamanho junto com o ponteiro, ou usar um struct
typedef struct { int *data; size_t len; } IntSlice;
// ❌ Aritmética de ponteiros onde indexação de array é mais clara
*(arr + i) = value;

// ✅
arr[i] = value;
// ❌ VLA em código de produção (risco de estouro de pilha, opcional no C11+)
int arr[n];

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

3. Tratamento de Erros {#erros}

// ❌ Usar números mágicos para retornos de erro
if (do_thing() == -1) { ... }

// ✅ — definir ou usar códigos de erro nomeados
#include <errno.h>
if (do_thing() < 0) {
    perror("do_thing");
    return errno;
}
// ❌ Verificações de erro profundamente aninhadas
int r1 = step1();
if (r1 == 0) {
    int r2 = step2();
    if (r2 == 0) {
        int r3 = step3();
        // ...
    }
}

// ✅ — retorno antecipado / goto cleanup
if (step1() < 0) goto fail;
if (step2() < 0) goto fail;
if (step3() < 0) goto fail;
return 0;
fail:
    cleanup();
    return -1;

goto cleanup é C idiomático para liberação de recursos — não o evite por princípio.


4. Strings {#strings}

// ❌ strcpy sem verificação de limites
strcpy(dest, src);

// ✅
strncpy(dest, src, sizeof(dest) - 1);
dest[sizeof(dest) - 1] = '\0';
// ou melhor: snprintf(dest, sizeof(dest), "%s", src);
// ❌ Uso incorreto de strcmp
if (str == "hello") { ... } // compara ponteiros, não conteúdo

// ✅
if (strcmp(str, "hello") == 0) { ... }
// ❌ Construir strings com strcat repetido (O(n²))
char result[1024] = "";
for (int i = 0; i < n; i++) {
    strcat(result, items[i]);
}

// ✅ — rastrear posição de escrita
char result[1024];
int pos = 0;
for (int i = 0; i < n && pos < (int)sizeof(result); i++) {
    pos += snprintf(result + pos, sizeof(result) - pos, "%s", items[i]);
}

Prefira snprintf a sprintf — sempre.


5. Structs e Enums {#structs}

// ❌ Struct puro exigindo a palavra-chave `struct` em todo lugar
struct point { int x, y; };
struct point p = {1, 2};

// ✅
typedef struct { int x, y; } Point;
Point p = {1, 2};
// ❌ Struct não inicializado
Point p;
use(p.x); // UB

// ✅
Point p = {0};
// ❌ Constantes inteiras mágicas
if (state == 3) { ... }

// ✅
typedef enum { STATE_IDLE, STATE_RUNNING, STATE_DONE } State;
if (state == STATE_DONE) { ... }

6. Pré-processador e Headers {#preprocessador}

// ❌ Macro onde função inline funciona (sem segurança de tipo, dupla avaliação)
#define MAX(a, b) ((a) > (b) ? (a) : (b))
MAX(x++, y) // x incrementado duas vezes se x > y

// ✅
static inline int max_int(int a, int b) { return a > b ? a : b; }
// ❌ Sem guarda de inclusão
// meu_header.h
struct Foo { int x; };

// ✅
#ifndef MEU_HEADER_H
#define MEU_HEADER_H
struct Foo { int x; };
#endif
// ou: #pragma once (amplamente suportado, não padrão)

Mantenha macros para compilação condicional e constantes. Use static inline para lógica.


7. Antipadrões específicos de C {#antipadroes}

AntipadrãoPreferível
sprintfsnprintf com tamanho do buffer
getsfgets (gets foi removido no C11)
Cast do resultado de mallocdeixar a conversão implícita de void* funcionar
sizeof(Tipo) em mallocsizeof *ptr
VLA para arrays grandes/em tempo de execuçãoalocação no heap
Callback void* sem parâmetro de contextopassar void *ctx junto com o ponteiro de função
Estado global mutávelpassar estado através de ponteiros para struct
assert para tratamento de erro em tempo de execuçãocódigos de retorno de erro adequados
Faltando const em parâmetros de ponteiro somente leituraconst char *str
Misturar signed/unsigned em comparaçõesusar tipos consistentes, fazer cast explícito

Limitações

  • Estas são diretrizes específicas da linguagem e não cobrem decisões arquiteturais gerais.
  • A compressão excessiva pode reduzir a legibilidade; use o bom senso.

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.

Habilidades Relacionadas