Frogman Engine C++ 程式設計規範

本文件可能會有進一步修訂。

前言

編程標準的必要性。

隨著專案的發展,程式碼庫會顯著增加,其規模取決於專案的目標與類型。不一致的程式碼庫會危及可讀性與可維護性,進而影響個人或團隊的生產力。

對於僅供一次性使用的程式碼庫,程式設計標準或許並非必要。然而,遵循程式設計風格指南是避免程式碼庫不一致,並防止陷入除錯地獄的必要條件。

所謂的「乾淨代碼」並不存在,這只是一個童話故事,因為對**「乾淨代碼」** 的認知取決於個人或團隊的主觀判斷。本文件的目標是避免編寫難以閱讀的代碼,並避免盲目遵循「乾淨代碼」。

(混淆且深度嵌套的程式碼簡化範例)

#include <iostream>
#include <cstdlib>

void mergeSort(int *arr, int l, int r) {
    if (l < r) {
        int m = l + (r - l) / 2;
        mergeSort(arr, l, m);
        mergeSort(arr, m + 1, r);
        int n1 = m - l + 1;
        int n2 = r - m;
        int *L = (int*) malloc(n1 * sizeof(int));
        int *R = (int*) malloc(n2 * sizeof(int));
        for (int i = 0; i < n1; i++) L[i] = arr[l + i];
        for (int j = 0; j < n2; j++) R[j] = arr[m + 1 + j];
        int i = 0, j = 0, k = l;
        while (i < n1) {
            if (j < n2) {
                if (L[i] <= R[j]) {
                    arr[k] = L[i];
                    i++;
                } else {
                    arr[k] = R[j];
                    j++;
                }
            } else {
                arr[k] = L[i];
                i++;
            }
            k++;
        }
        while (j < n2) {
            arr[k] = R[j];
            j++;
            k++;
        }
        free(L);
        free(R);
    }
}

編寫程式設計風格指南

(而非直接採用現成指南)。

網路上已有許多文獻詳盡的 C++ 程式設計風格指南與規範,例如 Google 風格指南與 Unreal 編碼標準。 儘管這些資源唾手可得,但理解規則背後的理由仍具有無可估量的價值。

參考

C++ Coding Standards | Pope's Dev Docs

主要規則

1. 不要盲目奉行「乾淨代碼」。盡量避免撰寫冗餘、過度設計或複雜的程式碼,以便同事能輕鬆閱讀並理解。