Skip to main content

google-cpp-style

Google C++ Style Guide rules for writing clean, maintainable C++ code. Use when writing C++, reviewing code, discussing naming conventions, formatting, class design, or any C++ best practices. Covers headers, scoping, classes, functions, naming, comments, and formatting.

معلومات المصدر

المستودع
ClickHouse/pg_stat_ch
آخر نشاط في المصدر
٢٥ يناير ٢٠٢٦ في ٠٠:٠٢
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
١٢٤
التفرعات
٦

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
9 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
google-cpp-style
description
Google C++ Style Guide rules for writing clean, maintainable C++ code. Use when writing C++, reviewing code, discussing naming conventions, formatting, class design, or any C++ best practices. Covers headers, scoping, classes, functions, naming, comments, and formatting.
# Google C++ Style Guide This skill provides the complete Google C++ Style Guide for C++20. Apply these rules when writing or reviewing C++ code. ## Quick Reference | Topic | Key Rules | |-------|-----------| | **Naming** | Types: `PascalCase`, functions: `PascalCase`, variables: `snake_case`, constants: `kPascalCase`, macros: `UPPER_CASE` | | **Formatting** | 80 char lines, 2-space indent, spaces (not tabs), `{` on same line | | **Headers** | Self-contained, `#define` guards, include what you use | | **Classes** | Prefer composition over inheritance, explicit constructors, `private` data members | ## Core Principles 1. **Optimize for the reader** - Code is read more than written 2. **Be consistent** - Follow existing patterns in the codebase 3. **Avoid surprising constructs** - Prefer clear over clever ## Target Version Code should target **C++20**. Do not use C++23 features or non-standard extensions. ## Detailed References For complete rules on specific topics: - [Header Files](headers.md) - Include guards, ordering, forward declarations - [Scoping](scoping.md) - Namespaces, linkage, static/global variables - [Classes](classes.md) - Constructors, inheritance, operator overloading - [Functions](functions.md) - Parameters, overloading, default arguments - [C++ Features](features.md) - Smart pointers, exceptions, RTTI, lambdas - [Naming](naming.md) - All naming conventions with examples - [Comments](comments.md) - Documentation style and requirements - [Formatting](formatting.md) - Whitespace, braces, line length ## Common Patterns ### Header File Template ```cpp #ifndef PROJECT_PATH_FILE_H_ #define PROJECT_PATH_FILE_H_ #include "project/public/header.h" #include <sys/types.h> #include <string> #include <vector> #include "other/library.h" #include "project/internal.h" namespace project { class MyClass { public: MyClass(); explicit MyClass(int value); void DoSomething(); int count() const { return count_; } void set_count(int count) { count_ = count; } private: int count_; }; } // namespace project #endif // PROJECT_PATH_FILE_H_ ``` ### Class Declaration Order ```cpp class MyClass { public: // Types and type aliases using ValueType = int; // Static constants static constexpr int kMaxSize = 100; // Constructors and assignment MyClass(); MyClass(const MyClass&) = default; MyClass& operator=(const MyClass&) = default; // Destructor ~MyClass(); // All other methods void Process(); protected: // Protected members (if needed) private: // Private methods void InternalHelper(); // Data members int value_; }; ``` ### Function Comments ```cpp // Returns an iterator positioned at the first entry >= `start_word`. // Returns nullptr if no such entry exists. // The client must not use the iterator after the table is destroyed. std::unique_ptr<Iterator> GetIterator(absl::string_view start_word) const; ``` ## Critical Rules Summary ### Always Do - Use `#define` guards in all headers - Make single-argument constructors `explicit` - Use `nullptr` (not `NULL` or `0`) for pointers - Use `override` or `final` for virtual function overrides - Declare data members `private` - Initialize variables at declaration ### Never Do - Use `using namespace` directives - Use C-style casts (use `static_cast`, etc.) - Use exceptions (in Google code) - Use non-standard extensions - Define macros in headers (when possible) - Use `std::auto_ptr` (use `std::unique_ptr`)
عرض على GitHub