Jun 19, 2013

[Tips] Tổ chức mã nguồn và lập trình Windows

Hôm nay lại hì hục với đồ án cuối kì môn Đồ Họa, kinh nghiệm thương đau lại về. Mà đau đớn hơn là do cu Micro$oft làm ra. Có thể kể một số lỗi chết người sau.
Các định danh đã được xài. Tụi MS rất vui tính, trong các thư viện tụi nó đã vứt vào đó rất nhiều biến, hàm, macro toàn cục rất dễ bị nhầm lẫn. Ví dụ từ nearfar. Nếu khai báo rồi mà lại còn xài windows.h thì coi như toi.

Cái thứ 2: Dù lười mấy đó thì lười. Thì việc định nghĩa hàm (hàm function chứ không phải method). Nếu đặt vào file cpp chứ không đặt trên header file. Vì chỉ cần 2 file trong project cùng include file header đó thì hàm đó sẽ được định nghĩa 2 lần. Và lỗi này khó giải quyết. Để cẩn thận, tốt nhất là nên rạch ròi giữa phần khai báo và định nghĩa.

Cái thứ 3: Tổ chức dữ liệu cho rõ ràng và cụ thể. Điều này đặc biệt quan trọng trong lập trình team. Sự nhập nhằng này khiến cho code chung rất khó chịu. Chính điều đó làm mã nguồn rối rắm, thuật toán không cụ thể và đặc biệt là khó giao tiếp với nhau qua code được.

Cái thứ 4: Chuyện đặt trình tự file header khá là hay ho. Nó có thể giúp ta xác định được lỗi nhanh chóng. Dưới đây là 1 số cách thông dụng:
  • Gom tất cả những header file cần thiết vào 1 header file. Ví dụ đây là 1 file tên libs.h
    /* * * * * * * * * * * * * * * * * * * * 
    * System and Standard Library header file
    * Author: DangKhoaSDC.
    * * * * * * * * * * * * * * * * * * * * /
    #ifndef _STANDARDLIBS
    #define _STANDARDLIBS
     
     
    #ifndef __cplusplus
    #error "Must use C++ compiler!!"
    #endif
     
    /* Use pre-defined C/C++ compiler macros to determinate OS,
    * version or architectures
    * More info: http://sourceforge.net/p/predef/wiki/Home/
    */
    #ifdef _WIN32
    /* * * * * * * * * 
    * Place for Windows
    *  * * * * * * * */
    #endif
     
    #ifdef __gnu_linux__
    /* * * * * * * * * 
    * Place for Linux
    *  * * * * * * * */
     
    #endif
     
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
     
    #include <cstdlib>
    #include <cstdio>
     
    /*
    * User-defined header file
    */
    #endif 
    
    Sau đó thì có thể thoải mái add file này vào trong các mã khác. File này cần header file đặc biệt thì mới cần thêm vào sau.
  • Tùy cơ ứng biến. File nào cần cái gì thì include cái đó. Một cái lợi lớn là không biên dịch ra những file quá lớn. Nhưng đôi lúc lại không quản lí được vì hơi lộn xộn. Hoặc cần phải tự tạo một phong cách đặt trình tự các header file để tránh gây ra các lỗi đáng tiếc.

Chút về viết tiếp
================