国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[翻譯]PEP 7 -- C語言風(fēng)格指南

Kylin_Mountain / 3299人閱讀

摘要:原文介紹這篇文檔給出了語言編碼的風(fēng)格約定,包括中用實(shí)現(xiàn)的部分。譯者注不清楚這里是什么意思,括號(hào)中原文為語言版本使用標(biāo)準(zhǔn)年版本。這意味著在許多其他事情中所有聲明必須放在某個(gè)塊的頂部并不一定是函數(shù)的頂部。

  

原文http://legacy.python.org/dev/peps/pep-0007/

介紹

這篇文檔給出了C語言編碼的風(fēng)格約定,包括Python中用C實(shí)現(xiàn)的部分。關(guān)于Python編碼風(fēng)格的約定,請(qǐng)參閱PEP-8 [1]

注意,有些約定并不一定要恪守。下面是打破約定的兩個(gè)很好的理由:

某個(gè)約定使得代碼難以閱讀,即使是對(duì)于那些習(xí)慣于閱讀風(fēng)格良好的代碼的人。

某個(gè)約定使得新增代碼與已有代碼不一致(可能是歷史原因?qū)е碌模1M管這也是一個(gè)清理別人糟糕代碼的好機(jī)會(huì)(用真正的XP風(fēng)格)。[譯者注:不清楚這里XP是什么意思,括號(hào)中原文為 in true XP style]

C語言版本

使用ISO/ANSI標(biāo)準(zhǔn)C(1989年版本)。這意味著(在許多其他事情中)所有聲明必須放在某個(gè)塊的頂部(并不一定是函數(shù)的頂部)。

不使用gcc的擴(kuò)展(例,多行字符串不能不加反斜杠)。

所有函數(shù)聲明和定義必須使用完整的原型(即,明確寫出所有參數(shù)的類型)

不使用C++風(fēng)格的//單行注釋

對(duì)于主流的編譯器(如gcc, VC++等),編譯時(shí)不能有警告

代碼布局

使用4個(gè)空格作為縮進(jìn),不使用tab

每行不超過79個(gè)字符。如果這和上一條規(guī)則讓你沒有空間去編碼,那你的代碼太復(fù)雜了 -- 考慮寫成子程序

每行都不應(yīng)該以空格結(jié)尾。如果你認(rèn)為你的代碼中有一些行末的空格很重要,再想想吧 -- 別人的編輯器可能會(huì)自動(dòng)刪掉它們。

函數(shù)定義風(fēng)格:函數(shù)名寫在行首,最外部的大括號(hào)寫在行首,聲明局部變量后空一行。

cstatic int
extra_ivars(PyTypeObject *type, PyTypeObject *base)
{
    int t_size = PyType_BASICSIZE(type);
    int b_size = PyType_BASICSIZE(base);

    assert(t_size >= b_size); /* type smaller than base! */
    ...
    return 1;
}

代碼結(jié)構(gòu):在if for等關(guān)鍵詞與括號(hào)之間要有一個(gè)空格;在括號(hào)內(nèi)部不要有空格;在C允許的時(shí)候,大括號(hào)可以不寫,但如果寫了大括號(hào),它們應(yīng)該是這樣的:

cif (mro != NULL) {
    ...
}
else {
    ...
}

返回語句中不要有多余的括號(hào)

creturn Py_None; /* correct */
return(Py_None); /* incorrect */

函數(shù)或宏的調(diào)用風(fēng)格foo(a, b, c) -- 函數(shù)名和左括號(hào)之間沒有空格,括號(hào)內(nèi)部沒有空格,逗號(hào)左邊沒有空格,每個(gè)逗號(hào)右邊有一個(gè)空格

總是在賦值、布爾運(yùn)算符、比較運(yùn)算符的兩邊加上空格。在有許多運(yùn)算符的表達(dá)式中,在最外部(最低優(yōu)先級(jí))的運(yùn)算符兩邊加上空格

很長(zhǎng)的行應(yīng)該被折行:如果可以,在第一個(gè)參數(shù)的逗號(hào)后開始折行。總是合適地縮進(jìn)剩下的行,例如:

cPyErr_Format(PyExc_TypeError,
             "cannot create "%.100s" instances",
             type->tp_name);

當(dāng)你對(duì)一個(gè)長(zhǎng)的表達(dá)式進(jìn)行折行的時(shí)候,運(yùn)算符總是在上一行的最末尾:

cif (type->tp_dictoffset != 0 && base->tp_dictoffset == 0 &&
    type->tp_dictoffset == b_size &&
    (size_t)t_size == b_size + sizeof(PyObject *))
    return 0; /* "Forgive" adding a __dict__ only */

在函數(shù)、結(jié)構(gòu)的定義、函數(shù)中的功能塊上下都加上空行

先寫注釋,再寫代碼

所有函數(shù)和全局變量必須被聲明為static,除非它們是發(fā)布了的或即將發(fā)布的接口

對(duì)于所有外部變量和函數(shù),我們總是在一個(gè)合適的頭文件中聲明它,這使用了PyAPI_FUNC()宏,例如:

cPyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *);
命名約定

對(duì)于公共的函數(shù),用Py作為前綴,這不能被用在內(nèi)部函數(shù)上。而Py_這個(gè)前綴是留給全局服務(wù)程序的如Py_FatalError。而特定的程序組(某個(gè)類型的接口)會(huì)用更長(zhǎng)的前綴,例如PyString_是字符串函數(shù)的前綴。

公共的函數(shù)和變量使用混合大小寫以及下劃線的命名規(guī)則,如PyObject_GetAttr Py_BuildValue PyExc_TypeError

有時(shí)候加載器需要知道一個(gè)內(nèi)部函數(shù)的名字,那這個(gè)內(nèi)部函數(shù)的名字以下劃線開頭,如_PyObject_Dump

宏應(yīng)該使用混合大小寫的前綴,然后全部大寫,如PyString_AS_STRING Py_PRINT_RAW

文檔字符串

使用PyDoc_STR()PyDoc_STRVAR()這兩個(gè)宏來支持構(gòu)建沒有文檔字符串的Python(./configure --without-doc-strings)
對(duì)于那些需要支持Python 2.3以上的C代碼,你可以在includePython.h后再include這個(gè):

c#ifndef PyDoc_STR
#define PyDoc_VAR(name)         static char name[]
#define PyDoc_STR(str)          (str)
#define PyDoc_STRVAR(name, str) PyDoc_VAR(name) = PyDoc_STR(str)
#endif

每條文檔字符串的第一行應(yīng)該是一個(gè)對(duì)參數(shù)和返回值給出摘要的“簽名”,例如:

cPyDoc_STRVAR(myfunction__doc__,
"myfunction(name, value) -> bool


Determine whether name and value make a valid pair.");

在“簽名”行和下面的描述行之間總是要有空行
如果返回值總是None(因?yàn)闆]有有意義的返回值),不要包括對(duì)返回值的推斷

寫多行文檔字符串時(shí),確保使用反斜杠,比如上面那個(gè)例子,或者是用字符串字面連接,如下:

cPyDoc_STRVAR(myfunction__doc__,
"myfunction(name, value) -> bool

"
"Determine whether name and value make a valid pair.");

盡管一些編譯器也接受下面這種:

c/* BAD -- don"t do this! */
PyDoc_STRVAR(myfunction__doc__,
"myfunction(name, value) -> bool


Determine whether name and value make a valid pair.");

但不是所有的編譯器都接受。比如MSVC的編譯器就會(huì)抱怨這種。

參考

[1] PEP 8, "Style Guide for Python Code", van Rossum, Warsaw (http://www.python.org/dev/peps/pep-0008)

版權(quán)

This document has been placed in the public domain.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/37456.html

相關(guān)文章

  • 如何用PEP 8編寫優(yōu)雅的Python代碼

    摘要:如果需要在二元運(yùn)算符周圍做換行操作,例如和,那么需要將換行操作放在前面,這條規(guī)則源于數(shù)學(xué),數(shù)學(xué)家同意在二元運(yùn)算符之前換行以可提高可讀性,比較以下兩個(gè)例子。在二元運(yùn)算符之前換行可以讓代碼更加具有可讀性,所鼓勵(lì)這種方式。 原文地址:How to Write Beautiful Python Code With PEP 8 作者:Jasmine Finer 翻譯:howie6879 ...

    seanHai 評(píng)論0 收藏0
  • 學(xué)習(xí)Python,怎能不懂點(diǎn)PEP呢?

    摘要:或許你是一個(gè)初入門的小白,完全不知道是什么。到目前為止,它擁有個(gè)兄弟姐妹。此外,關(guān)于對(duì)的貢獻(xiàn),還有一種很有效的方式,就是將翻譯成中文,造福國(guó)內(nèi)的學(xué)習(xí)社區(qū)。 或許你是一個(gè)初入門Python的小白,完全不知道PEP是什么。又或許你是個(gè)學(xué)會(huì)了Python的熟手,見過幾個(gè)PEP,卻不知道這玩意背后是什么。那正好,本文將系統(tǒng)性地介紹一下PEP,與大家一起加深對(duì)PEP的了解。 目前,國(guó)內(nèi)各類教程不...

    Magicer 評(píng)論0 收藏0
  • Python3 簡(jiǎn)明教程

    摘要:課程簡(jiǎn)介簡(jiǎn)明易懂的課程,不僅適用于那些有其它語言基礎(chǔ)的同學(xué),對(duì)沒有編程經(jīng)驗(yàn)的同學(xué)也非常友好。建議遵守以下約定使用個(gè)空格來縮進(jìn)永遠(yuǎn)不要混用空格和制表符在函數(shù)之間空一行在類之間空兩行字典,列表,元組以及參數(shù)列表中,在后添加一個(gè)空格。 showImg(https://segmentfault.com/img/bVCldE); 課程簡(jiǎn)介:簡(jiǎn)明易懂的 Python3 課程,不僅適用于那些有其它語...

    cyqian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<