譯 微軟官方的 C 編碼風格

2021-09-16 18:27:39 字數 2814 閱讀 5766

對於c++檔案(*.cpp和*.h),我們使用clan格式(版本3.6 +)來確保**樣式。在更改任何cpp或**件之後,在合併之前,必須執行src/native/format-code.sh。此指令碼將確保所有本機**檔案都遵循編碼樣式準則。

對於非**檔案(xml等),我們當前的最佳指導是一致性。編輯檔案時,保持新**和更改與檔案中的樣式一致。對於新檔案,它應該符合該元件的樣式。如果有乙個全新的元件,任何被合理廣泛接受的元件都可以。

我們遵循的一般規則是「使用visual studio預設值」。

1. 我們使用allman樣式的大括號,其中每個大括號都從新的行開始。單行語句塊可以不帶大括號,但塊必須在自己的行上正確縮排,並且不能巢狀在使用大括號的其他語句塊中(示例請參見問題381)。乙個例外是,通過在同一縮排級別的下一行開始,允許using語句巢狀在另乙個using語句中,即使巢狀的using包含受控塊。

2. 我們使用四個空格而不是製表符。

3. 我們將_camelcase用於內部和私有字段,並盡可能使用readonly。為內部和私有例項字段加字首_,靜態字段加字首s_,執行緒靜態字段加字首t_。當用於靜態欄位時,readonly應位於static之後(例如static readonly而不是readonly static)。公共欄位應謹慎使用,使用時應使用不帶字首的pascalcasing。

4. 我們避免使用 this. 。除非絕對必要。

5. 我們總是指定可見性,即使它是預設值(例如private string _foo而不是string _foo)。可見性應該是第乙個修飾符(例如public abstract 而不是abstract public)。

6. 命名空間匯入應在檔案的頂部、命名空間宣告之外指定,並且應按字母順序排序,system.*命名空間除外,它將放在所有其他命名空間的頂部。

7. 任何時候都避免使用多個空行。例如,乙個型別的成員之間不能有兩個空行。

8. 避免虛假的空格。例如,避免if(somevar==0)…,其中點標記是虛假的空格。如果使用visual studio輔助檢測,請考慮啟用「檢視空白(ctrl+e, s)」。

9. 如果某個檔案的樣式與這些準則不符(例如,私有成員命名為 m_member 而不是 _member),則該檔案中的現有樣式優先。

10. 我們只在變數型別十分明顯時使用 var(例如 var stream = new filestream(...) 而不是 var stream = openstandardinput()).)。

11. 對於型別引用(例如 int、string、float而不是int32、string、single等)和方法呼叫(例如 int.parse(...) 而不是 int32.parse(...)),我們使用語言關鍵字而不是bcl型別。示例見第391期。

12. 我們使用pascalcasing來命名所有的常量、區域性變數和字段。唯一的例外是interop**,其中常量值應與通過interop呼叫的**的名稱和值完全匹配。

13. 我們盡可能使用 nameof(...),而不是 "..." 的名稱。

14. 欄位應在**頂部,並宣告型別。

15. 在源**中包含非ascii字元時,請使用unicode轉義序列(\u***x)而不是文字字元。文字非ascii字元偶爾會被工具或編輯器弄亂。

16. 當為 goto 語句使用標籤時,將標籤縮排乙個小於當前縮排的值。

我們在corefx儲存庫的根目錄下提供了乙個visual studio vssettings檔案(corefx.vssettings),使c自動格式化符合上述準則。請注意,vssettings不包括規則7和8,因為這些規則當前不受vs格式支援。

此外,對於非visual studio編輯器中的自動格式化,還在corefx儲存庫的根目錄下提供了editorconfig檔案(.editorconfig)。

我們還使用.net**格式化工具來確保**庫在一段時間內保持一致的樣式,該工具會自動修復**庫以符合上面概述的準則。

observablelinkedlist`1.cs:
using system;

using system.collections;

using system.collections.generic;

using system.collections.specialized;

using system.componentmodel;

using system.diagnostics;

using microsoft.win32;

namespace system.collections.generic

}public event notifycollectionchangedeventhandler collectionchanged;

public int count

}public observablelinkedlistnode addlast(t value)

protected virtual void oncollectionchanged(notifycollectionchangedeventargs e)

}private void insertnodebefore(linkedlistnodenode, linkedlistnodenewnode)

...}

}

observablelinkedlist`1.observablelinkedlistnode.cs:
using system;

namespace system.collections.generics

public t value}}

...}

}

微軟發布編碼風格強制工具StyleCop

制編碼風格是乙個長期被熱烈爭論的話題。人們不僅為團隊應該遵循何種編碼風格而爭論不休,同時還要爭論究竟是否應該確立乙個標準的編碼風格。現在,微軟發布了stylecop,這是他們在內部使用的乙個編碼風格強制工具,微軟的這一舉措無疑將起到推波助瀾的作用。stylecop,也即所謂的微軟c 源 分析器 mi...

Python3 2 官方文件教程 編碼風格

2.8 編碼風格 現在你準備寫出更長而複雜的python 了,也是該告訴你關於 python 的編碼風格時候了。很多語言可以用不同的風格進行編碼。有些風格比其他風格編寫的 更有可讀性。因此,讓別人能有輕易地讀懂你的 是一直是個好想法,並且養成這種良好的編碼風格將更大地幫助你。對於python pep...

C 編碼風格與規範

命名應該含義明確,不要為了節省空間使用縮寫。int n bad 無明確含義的單字母名稱 string cstmrname bad 非約定俗成的縮寫 int width,height ok 含義明確 int numcolors ok num屬於約定俗成的縮寫 for int i 0 i 100 i o...