# Programming Cpp Naming Rules

> C++ file and class naming conventions - folder structure matches namespaces, no redundant prefixes

- Skill: `rocm/programming-cpp-naming-rules` (Agent Skill)
- Install (CLI): `npx skillmds@latest add rocm/programming-cpp-naming-rules`
- Raw SKILL.md: https://api.skillmd.com/api/skills/rocm/programming-cpp-naming-rules/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: rocm (https://skillmd.com/u/rocm)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/rocm/programming-cpp-naming-rules

---


# C++ Naming Rules

Use this skill when creating new C++ files or refactoring file structure.

## Folder Structure = Namespace

Folder structure should correspond to namespaces. Don't repeat namespace prefixes in filenames.

```cpp
// ❌ BAD: amd_smi/amd_smi_driver.hpp
namespace amd_smi {
class amd_smi_driver {};  // Redundant prefix
}

// ✅ GOOD: amd_smi/driver.hpp
namespace amd_smi {
class driver {};  // Clean, folder provides context
}
```

## Rules

1. **No redundant prefixes**: If file is in `amd_smi/`, don't name it `amd_smi_driver.hpp` - use `driver.hpp`
2. **Namespace = folder path**: `foo/bar/baz.hpp` → `namespace foo::bar { class baz {} }`
3. **Class name = file name**: `driver.hpp` contains `class driver` or `struct driver`
4. **One class per file** (when practical): Easier to find and maintain

## Examples

| Folder Path | File Name | Namespace | Class/Struct |
|-------------|-----------|-----------|--------------|
| `amd_smi/` | `driver.hpp` | `amd_smi` | `driver` |
| `amd_smi/gpu/` | `metrics.hpp` | `amd_smi::gpu` | `metrics` |
| `core/utils/` | `string_helper.hpp` | `core::utils` | `string_helper` |
| `network/http/` | `client.hpp` | `network::http` | `client` |

## Nested Namespaces (C++17)

Use nested namespace syntax when declaring:

```cpp
// ✅ GOOD: C++17 nested namespace
namespace network::http {
class client {
    // ...
};
}  // namespace network::http

// ❌ AVOID: Old style (more verbose)
namespace network {
namespace http {
class client {
    // ...
};
}  // namespace http
}  // namespace network
```

## Include Guards / #pragma once

Match the full path in include guards:

```cpp
// File: amd_smi/gpu/metrics.hpp

#pragma once  // Preferred

// OR traditional include guard matching full path:
#ifndef AMD_SMI_GPU_METRICS_HPP
#define AMD_SMI_GPU_METRICS_HPP

// ...

#endif  // AMD_SMI_GPU_METRICS_HPP
```

## Summary

- **Folder = namespace context** - don't repeat it in filenames
- **Filename = class name** - easy to find
- **Path tells the full story**: `project/module/submodule/class.hpp`

