C++ 速查手冊 V1.00 - A.2 - 程式碼風格




C++ 是自由格式的語言,這是說只要符合編譯器解析的規則,程式碼要怎麼編排,或是要取怎麼樣的變數名稱,其實都沒有關係。例如函數


    void do_something() {
       std::cout << "hello"
                 << std::endl;
    }

函數要有回傳值型態,至於回傳值型態名稱與函數識別字之間必須至少空一格,至於要空多少格則是沒有限制,這是因為編譯器解析到回傳值型態、空白字元、識別字加小括弧,就會認為是一個函數原型或是函數定義,一個空格就是一個空白字元,編譯器只在乎有空白字元,並不在乎有多少個空白字元。


為什麼要這樣解析呢?因為這給我們編排程式碼的自由,像是函數定義的大括弧,要放在宣告的同一行


    void do_something() {

或是下一行


    void do_something()
    {

編譯器都接受,包括每一行後面還有空白字元,編譯器也都會通通忽略。


取名變數或識別字也都可以隨自己的意思,就是只能用英文大小寫字母及數字、底線,習慣上會採用有意義的英文單字,或是英文單字的組合。英文單字的組合有直接連接、底線連接、大寫駝峰型與小寫駝峰型等等。


不同的開發團隊會有不同的程式碼編排風格與不同的識別字命名習慣,這是因為開發團隊之間程式碼要互通,總不能一個小組自搞 C++a 方言,然後另一個小組搞 C++b 方言吧!所以每一個開發團隊都會要求一致的程式碼風格與命名習慣。


誰來決定程式碼風格與命名習慣呢?當然就是團隊的老大囉!總是老大說了算,每個人都有他自己的喜惡,老大自然有他獨特的喜惡,因此踏入任何開發團隊,首先就是要了解這個開發團隊的程式碼風格與命名習慣。


我們以下介紹 Google C++ Style Guide1 中的命名習慣。首先,利用小寫英文單字的有變數、類別中的資料成員、存取函數、修改函數、命名空間以及結構中的變數等


    result
    units_sold
    avg_price
    somename
    get_number()
    set_number()

利用大寫英文單字的有巨集、列舉中的變數等等


    ROUND(x)
    PI_ROUNDED
    OUT_OF_MEMORY
    MYSTR

利用大寫駝峰型的有類別、列舉、函數等


    SalesItem
    UrlTable
    Screen
    DoSomething()

利用小寫駝峰型的有常數、列舉中的變數等


    feetPerYard
    inchesPerFoot
    kDaysInAWeek
    kOK

其他像是檔案名稱則是小寫英文單字利用底線或破折號連接,例如


    demo.cpp
    myusefulclass.cpp
    my_useful_class.cpp
    my-useful-class.cpp

不同的作者可能會有不同的習慣,或是同一本書裡也有可能出現多種寫法,無論如何,掌握命名的基本規則,多看多熟悉,等到實際開發經驗累積多一點之後,自然進到任何的開發團隊都能順著既有的習慣寫程式囉!


  1. Google C++ Style Guide: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

the end

沒有留言: