Pular para o conteúdo
Skillpedia
Código em geral280 mil · #33

cpp-coding-standards

Ajuda seu agente a escrever código C++ seguindo regras modernas e seguras. Garante que o código seja de alta qualidade e fácil de manter.

O que ela faz

Este guia ajuda programadores a escrever código C++ mais seguro, moderno e fácil de entender. Ele sugere como organizar o código, nomear variáveis e funções, e gerenciar recursos para evitar erros comuns.

Quando usar

  • ✓Ao escrever novo código C++.
  • ✓Ao revisar ou melhorar código C++ existente.
  • ✓Ao decidir como estruturar um projeto C++.

Exemplo do que pedir para a IA

“Como posso garantir que meu código C++ seja seguro e fácil de ler?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/cpp-coding-standards/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/cpp-coding-standards/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O guia oferece regras e exemplos práticos para escrever código C++ seguindo as melhores práticas. Ele foca em clareza, segurança de tipos e gerenciamento correto de memória.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill cpp-coding-standards

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/cpp-coding-standards/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Codificação C++ (C++ Core Guidelines)

Padrões de codificação abrangentes para C++ moderno (C++17/20/23) derivados das C++ Core Guidelines. Impõe segurança de tipo, segurança de recursos, imutabilidade e clareza.

Quando Usar

  • Escrever novo código C++ (classes, funções, templates)
  • Revisar ou refatorar código C++ existente
  • Tomar decisões arquiteturais em projetos C++
  • Impor estilo consistente em uma base de código C++
  • Escolher entre recursos da linguagem (por exemplo, enum vs enum class, ponteiro bruto vs ponteiro inteligente)

Quando NÃO Usar

  • Projetos que não são C++
  • Bases de código C legadas que não podem adotar recursos modernos de C++
  • Contextos embarcados/bare-metal onde diretrizes específicas entram em conflito com restrições de hardware (adaptar seletivamente)

Princípios Transversais

Esses temas recorrem em todas as diretrizes e formam a base:

  1. RAII em todos os lugares (P.8, R.1, E.6, CP.20): Vincule o tempo de vida do recurso ao tempo de vida do objeto
  2. Imutabilidade por padrão (P.10, Con.1-5, ES.25): Comece com const/constexpr; mutabilidade é a exceção
  3. Segurança de tipo (P.4, I.4, ES.46-49, Enum.3): Use o sistema de tipos para prevenir erros em tempo de compilação
  4. Expresse a intenção (P.3, F.1, NL.1-2, T.10): Nomes, tipos e conceitos devem comunicar o propósito
  5. Minimize a complexidade (F.2-3, ES.5, Per.4-5): Código simples é código correto
  6. Semântica de valor em vez de semântica de ponteiro (C.10, R.3-5, F.20, CP.31): Prefira retornar por valor e objetos com escopo

Filosofia e Interfaces (P., I.)

Regras Chave

Regra Resumo
P.1 Expresse ideias diretamente no código
P.3 Expresse a intenção
P.4 Idealmente, um programa deve ser estaticamente seguro em termos de tipo
P.5 Prefira verificação em tempo de compilação a verificação em tempo de execução
P.8 Não vaze nenhum recurso
P.10 Prefira dados imutáveis a dados mutáveis
I.1 Torne as interfaces explícitas
I.2 Evite variáveis globais não-const
I.4 Torne as interfaces precisamente e fortemente tipadas
I.11 Nunca transfira propriedade por um ponteiro bruto ou referência
I.23 Mantenha o número de argumentos de função baixo

FAZER

// P.10 + I.4: Immutable, strongly typed interface
struct Temperature {
    double kelvin;
};

Temperature boil(const Temperature& water);

NÃO FAZER

// Weak interface: unclear ownership, unclear units
double boil(double* temp);

// Non-const global variable
int g_counter = 0;  // I.2 violation

Funções (F.*)

Regras Chave

Regra Resumo
F.1 Empacote operações significativas como funções cuidadosamente nomeadas
F.2 Uma função deve realizar uma única operação lógica
F.3 Mantenha funções curtas e simples
F.4 Se uma função pode ser avaliada em tempo de compilação, declare-a constexpr
F.6 Se sua função não deve lançar exceções, declare-a noexcept
F.8 Prefira funções puras
F.16 Para parâmetros "in", passe tipos copiáveis facilmente por valor e outros por const&
F.20 Para valores "out", prefira valores de retorno a parâmetros de saída
F.21 Para retornar múltiplos valores "out", prefira retornar uma struct
F.43 Nunca retorne um ponteiro ou referência para um objeto local

Passagem de Parâmetros

// F.16: Cheap types by value, others by const&
void print(int x);                           // cheap: by value
void analyze(const std::string& data);       // expensive: by const&
void transform(std::string s);               // sink: by value (will move)

// F.20 + F.21: Return values, not output parameters
struct ParseResult {
    std::string token;
    int position;
};

ParseResult parse(std::string_view input);   // GOOD: return struct

// BAD: output parameters
void parse(std::string_view input,
           std::string& token, int& pos);    // avoid this

Funções Puras e constexpr

// F.4 + F.8: Pure, constexpr where possible
constexpr int factorial(int n) noexcept {
    return (n <= 1) ? 1 : n * factorial(n - 1);
}

static_assert(factorial(5) == 120);

Anti-Padrões

  • Retornar T&& de funções (F.45)
  • Usar va_arg / variádicas estilo C (F.55)
  • Capturar por referência em lambdas passadas para outras threads (F.53)
  • Retornar const T que inibe semânticas de movimento (F.49)

Classes e Hierarquias de Classes (C.*)

Regras Chave

Regra Resumo
C.2 Use class se houver invariante; struct se os membros de dados variam independentemente

…

Perguntas frequentes

O que é 'RAII'?

RAII significa 'Resource Acquisition Is Initialization'. É uma técnica onde a aquisição de um recurso (como memória ou um arquivo) é ligada à vida de um objeto. Quando o objeto sai de uso, o recurso é liberado automaticamente.

O que significa 'imutabilidade por padrão'?

Significa que, por padrão, os dados devem ser declarados como constantes (imutáveis), a menos que haja uma razão clara para que eles possam ser modificados. Isso ajuda a prevenir alterações acidentais.

Por que é melhor usar 'valor' em vez de 'ponteiro'?

Preferir semântica de valor (objetos que contêm dados) em vez de semântica de ponteiro (referências a dados) geralmente torna o código mais seguro, pois o gerenciamento de memória é mais simples e os erros de ponteiro nulo são evitados.

Detalhes

Descrição original do autor

C++ coding standards based on the C++ Core Guidelines (isocpp.github.io). Use when writing, reviewing, or refactoring C++ code to enforce modern, safe, and idiomatic practices.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#33
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas