skills/jdubray/puffin/coding-standard-cpp

coding-standard-cpp

SKILL.md

C++ Coding Standards

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
Weekly Installs
22
Repository
jdubray/puffin
GitHub Stars
17
First Seen
Jan 22, 2026
Installed on
opencode17
claude-code16
gemini-cli16
codex16
trae14
github-copilot14