Skip to content

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 {} cho if, 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.

Nội dung trong phần này