🌱 Tool Auto apply C code style
Coding Convension là yếu tố vô cùng quan trọng khi chúng ta triển khai các project với nhiều người, nhiều files, folders. Vậy khi code nhiều thứ như vậy, thì chắc hẳn có lúc sẽ bị quên hoặc nhầm lẫn style hay convension khi code.
Bài viết này mình sẽ giới thiệu với các bạn một Tool để có thể phát hiện sai sót style code C, cũng như tự động chỉnh lại cho đúng 😅
🔻 Funny Notes
Công việc chính là làm việc với những project lớn đó là phát triển module
và maintain code.
Một tip nhỏ là chúng ta nên check code có sẵn và làm theo nó khi triển khai
maintain code - Check the surrounding code.
Vì thật không hay khi phần mà ta maintain lại có style khác với phần code
có sẵn! Hãy cố gắng thống nhất style và convension.
👉 Tool C Rules
Dưới đây là một số Rules sẽ được apply trong tool.
💬 General Rules
- Sử dụng chuẩn C99.
- Không sử dụng phím tabs mà dùng các dấu spaces để thay thế.
- Dùng 4 dấu spaces thay thế cho dấu tab.
- Dùng 1 dấu spaces giữa keyword và dấu ngoặc.
/* OK */if (condition) while (condition) for (init; condition; step) do {} while (condition) /* Wrong */ if(condition) while(condition) for(init;condition;step) do {} while(condition)
- Không sử dụng dấu space giữa tên function và dấu ngoặc
int32_t a = sum(4, 3); /* OK */int32_t a = sum (4, 3); /* Wrong */
- Không sử dụng __ hoặc _ ở đầu tên của variables, functions, macros, types. Và chỉ dùng các ký tự viết thường để đặt tên variables, functions, macros, types, có thể dùng ký tự _ ở giữa.
- Sử dụng dấu space sau các dấu phẩy, giữa các toán hạng, phép gán, ...
- Không nên khởi tạo các biến static hoặc global với giá trị 0 hoặc NULL, vì Compiler sẽ làm điều đó.
- Luôn khai báo tất cả local variables ở đầu một block/function.
- Ngoại trừ char, float, double, luôn dùng các types trong thư viện stdint.h.
- Không sử dụng thư viện stdbool.h. Thay vào đó dùng giá trị 1 và 0.
💬 Comments
- Không được sử dụng dấu comment //. Luôn dùng /* */ kể cả đối với single line comment. Bởi vì một số compiler sẽ không cho phép sử dụng //.
// This is comment (wrong)/* This is comment (ok) */
- Với comment multiple line, kết hợp sử dụng space+asterisk (dấu sao) với mỗi dòng.
/** This is multi-line comments,* written in 2 lines (ok)*//*** Wrong, use double-asterisk only for doxygen documentation*//** Single line comment without space before asterisk (wrong)*//** Single line comment in multi-line configuration (wrong)*//* Single line comment (ok) */
💬 Functions
- Các hàm cho phép truy cập từ file, module khác đều cần có prototypes.
- Tên function nên để chữ viết thường, có thể có ký tự _.
/* OK */void my_func(void); void myfunc(void); /* Wrong */ void MYFunc(void); void myFunc();
💬 Header/Source Files
- Cuối mỗi file cần có một dòng trống.
- Mỗi file cần có chú thích, mô tả ngắn gọn.
- Các file header phải có include guard #ifndef.
- Header files cần có phần C++ checking.
- Với các biến extern thì cần define trong source file và extern trong header file.
/* file.h ... */#ifndef ... extern int32_t my_variable; /* This is global variable declaration in header */ #endif /* file.c ... */ int32_t my_variable; /* Actually defined in source */
👉 Trên đây là các rules chính mà mình muốn nhắc đến, còn rất nhiều rules khác nữa, các bạn có thể tham khảo trong file Readme.md ở repo bên dưới nhé!
👉 Sử dụng Tool AStyle
👉 Đường dẫn đến Tool Astyle (Artistic Style) ⇒ Link Repo.
Tool này bao gồm 2 file chính: File AStyle.exe và astyle-code-format.cfg.
Để chạy tool, các bạn có thể truy cập vào cửa sổ Command Prompt, cd đến folder chứa file AStyle.exe. Sau đó chạy Command sau:
astyle --options="astyle-code-format.cfg" "input_path/*.c,*.h"
Với input_path là đường dẫn đến project cần check style.
👉 Ví dụ với hình ảnh trên ta có 2 file là template.c và template.h.
Làm theo các bước trên và chạy command:
- Đối với project không có file nào bị lỗi style, thì kết quả sẽ như ở trên.
- Đối với project có file nào đó bị lỗi style, tool sẽ tự động chỉnh lại và cho ra kết quả như dưới đây: