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.
// ❌ 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
- No redundant prefixes: If file is in
amd_smi/, don't name itamd_smi_driver.hpp- usedriver.hpp - Namespace = folder path:
foo/bar/baz.hpp→namespace foo::bar { class baz {} } - Class name = file name:
driver.hppcontainsclass driverorstruct driver - 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:
// ✅ 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:
// 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