C++ Coding Standards

SkillFiles & storage

Enforce C++ coding standards including camelCase or snake_case variables, PascalCase classes, and consistent file naming.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the C++ Coding Standards skill

What this skill tells your AI

The instructions your AI receives, as published by jdubray/puffin in .claude/skills/coding-standard-cpp/SKILL.md and read by ahel’s review.

When reviewing or generating C++ code, follow these rules:

File Naming

  • Source files: snake_case or PascalCase with .cpp extension (e.g., user_service.cpp or UserService.cpp)
  • Header files: Same base name with .h, .hpp, or .hxx extension
  • Template files: .tpp or .inl for template implementations
  • Be consistent within a project

Header Guards / Pragma

  • Prefer #pragma once for modern compilers
  • Or use traditional guards: UPPER_SNAKE_CASE with _HPP suffix
#pragma once
// or
#ifndef USER_SERVICE_HPP
#define USER_SERVICE_HPP
#endif

Namespace Naming

  • Namespaces: all_lowercase or snake_case (e.g., myproject, data_processing)
  • Nested namespaces: Use C++17 syntax when possible (e.g., namespace project::utils {})
  • Avoid using namespace in headers

Variable Naming

  • Local variables: snake_case or camelCase (e.g., user_count or userCount)
  • Member variables: Prefix with m_ or suffix with _ (e.g., m_data or data_)
  • Static members: Prefix with s_ (e.g., s_instance)
  • Constants: UPPER_SNAKE_CASE or kPascalCase (e.g., MAX_SIZE or kMaxSize)
  • Global variables: Prefix with g_ (e.g., g_config)

Function/Method Naming

  • Free functions: snake_case or camelCase (e.g., calculate_total() or calculateTotal())
  • Member functions: camelCase or PascalCase (e.g., getUserId() or GetUserId())
  • Getters/Setters: get/set prefix or just property name (e.g., getName() or name())
  • Factory functions: Create, Make, or Build prefix (e.g., CreateUser())

Class/Type Naming

  • Classes: PascalCase (e.g., UserService, DataProcessor)
  • Structs: PascalCase (e.g., Point, Rectangle)
  • Interfaces: PascalCase with I prefix optional (e.g., ISerializable or Serializable)
  • Template parameters: Single letter or PascalCase (e.g., T, Container, KeyType)
  • Enums: PascalCase for type, UPPER_SNAKE_CASE or PascalCase for values
  • Type aliases: PascalCase (e.g., using StringList = std::vector<std::string>;)

Smart Pointers

  • Use std::unique_ptr for single ownership
  • Use std::shared_ptr for shared ownership
  • Avoid raw new/delete

Organization

  • Include guards / pragma once
  • System includes (alphabetical)
  • Project includes (alphabetical)
  • Forward declarations
  • Namespace opening
  • Class declarations
  • Inline/template implementations

Signals

GitHub stars
27
Forks
7
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
coding-standard-cpp
Source
github.com/jdubray/puffin