Coding Convention Overview¶
Coding convention (quy ước viết code) là tập quy tắc về cách đặt tên, định dạng, tổ chức file, comment và xử lý lỗi mà cả team cùng tuân theo. Mục tiêu không phải là "đẹp" mà là dễ đọc, dễ review, dễ bảo trì và giảm lỗi ngớ ngẩn.
Tại sao cần coding convention¶
- Code được đọc nhiều hơn viết: một convention thống nhất giúp đọc code của người khác như code của mình.
- Diff/review gọn hơn: không bị nhiễu bởi thay đổi whitespace hay đổi tên theo gu cá nhân.
- Tránh một số lớp lỗi (ví dụ: luôn dùng
{}choif, khởi tạo biến, kiểm tra return value). - Có thể tự động hoá bằng công cụ (formatter, linter) thay vì tranh luận thủ công.
Các khía cạnh thường được quy định¶
| Khía cạnh | Ví dụ nội dung |
|---|---|
| Layout | Indent, độ dài dòng, vị trí dấu {}, khoảng trắng |
| Naming | snake_case / CamelCase, prefix module, macro viết hoa |
| Comment | Khi nào comment, kiểu comment, doc-comment |
| File organization | Header guard, thứ tự #include, một file một nhiệm vụ |
| Function | Độ dài tối đa, số tham số, một hàm một việc |
| Error handling | Kiểm tra return value, cleanup path (goto), mã lỗi |
| Memory & resource | Ai cấp phát, ai giải phóng, quy tắc ownership |
| Type & macro | Dùng typedef, inline vs macro, kiểu có kích thước cố định |
Một số bộ convention phổ biến (C/C++)¶
| Convention | Phạm vi | Đặc điểm |
|---|---|---|
| Linux kernel coding style | Linux kernel, driver | Tab 8 ký tự, 80 cột, K&R, snake_case |
| MISRA C | Automotive, safety-critical | Tập luật nghiêm ngặt, kiểm tra bằng static analyzer |
| CERT C | Secure coding | Tập trung vào lỗi bảo mật (buffer overflow, integer overflow...) |
| GNU Coding Standards | Dự án GNU | Indent 2 space, brace kiểu GNU |
| Google C++ Style Guide | Dự án Google | Quy tắc chi tiết cho C++, có cpplint |
Note
Khi làm việc với một codebase có sẵn, tuân theo convention của codebase đó thay vì áp convention yêu thích của bản thân. Với kernel/driver thì đó là Linux kernel coding style.
Công cụ hỗ trợ¶
- Formatter:
clang-format,indent(tự động định dạng theo style). - Linter / static analysis:
checkpatch.pl(kernel),cppcheck,clang-tidy,sparse. - EditorConfig: file
.editorconfigđể thống nhất indent/charset giữa các editor. - Git hook / CI: chạy formatter/linter tự động trước khi commit hoặc merge.