首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

【編程好習慣】命名規範區分變數屬性:成員_、參數_、區域/全域無符號

     編輯:關於C語言

清晰的命名規範能讓程式碼「一眼辨識」變數屬性,大幅降低閱讀認知負荷。筆者慣用的規則簡單且強健:

三類變數命名規則

變數類別命名規則範例
結構體/C++ 類別成員變數尾碼加單底線 _prev_, next_, addr_
函數參數前綴加單底線 __p_node, _p_key, _size
區域變數 / 全域變數無特殊前後綴addr, p_mnode, p_next

實戰代碼示範


typedef struct dll_node
{
    struct dll_node *prev_;   // 成員變數
    struct dll_node *next_;   // 成員變數
} dll_node_t;

// 函數參數皆以 _ 開頭
static bool mem_find_neighbor(dll_node_t *_p_node, void *_p_key)
{
    // 區域變數無前後綴
    maddr_t addr = *(maddr_t *)_p_key;
    mnode_t *p_mnode = (mnode_t *)_p_node;
    mnode_t *p_next = (mnode_t *)p_mnode->node_.next_; // 存取成員:node_.next_

    if (p_next == 0 || p_mnode->addr_ > addr) {
        return false;
    }

    // 尋找 addr 介於當前節點與下一節點之間的位置
    if ((p_mnode->addr_ < addr) && (p_next->addr_ > addr)) {
        return false;
    }

    return true;
}

解決「同名衝突」痛點

函數內常需定義與參數同義的區域變數(如參數 _size,區域變數 size)。若無命名區分,常見做法是 size_temp、local_size,語義模糊。採用本規則:

  • 參數:_size
  • 區域:size

讀者瞬間理解:兩者語義相同,僅作用域不同,消除臨時變數命名煩惱。

擴展建議

  • 全域變數:若專案規模大,建議加前綴 g_(如 g_total_users),與區域變數區隔。
  • 靜態區域/全域:可加 s_ 前綴(如 s_instance)。
  • 常數/宏:全大寫 + 下劃線(MAX_BUFFER_SIZE)。
  • 類別名:PascalCase(MessageQueue)。
  • 函數/方法:camelCase 或 PascalCase 視團隊風格統一。

團隊落地關鍵

  1. 文件化:寫入編碼規範文件,納入 Code Review 檢查清單。
  2. 工具強制:配置 clang-format、cpplint、EditorConfig 自動檢查。
  3. 新人引導:入職第一天解釋命名哲學,而非單純背誦規則。

核心價值:命名規範不是為了「好看」,而是讓變數屬性(生命週期、作用域、所有權)在識別碼中顯性化,減少除錯時在腦中模擬作用域的心智負擔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved