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
Mensagem pronta para colar
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-standardsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/cpp-coding-standards/SKILL.md -o SKILL.mdConteú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,
enumvsenum 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:
- 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
- Imutabilidade por padrão (P.10, Con.1-5, ES.25): Comece com
const/constexpr; mutabilidade é a exceção - 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
- Expresse a intenção (P.3, F.1, NL.1-2, T.10): Nomes, tipos e conceitos devem comunicar o propósito
- Minimize a complexidade (F.2-3, ES.5, Per.4-5): Código simples é código correto
- 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 Tque 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
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail