把*放到名字這一邊,看來也不能有效地減少這種錯誤:
int *p, p1; // 也許是錯的?
為每一個名字寫一條聲明最大程度地解決了問題——特別是當我們初始化變量的時候。人們幾乎不會這樣寫:
int* p = &i;
int p1 = p; // 錯誤:int用一個int*初始化了
如果他們真的這么干了,編譯器也會指出。
每當事情可以有兩種方法完成,有人就會迷惑。每當事情僅僅是一個風格的問題,爭論就會沒完沒了。為每一個指針寫一條聲明,而且永遠都要初始化變量,這樣,混亂之源就消失了。更多的關于C的聲明語法的討論,參見《C++語言的設計和演變》。
對于我的代碼,哪一種布局風格(layout style)是最好的?
這種風格問題屬于個人的愛好。人們往往對布局風格的問題持有強烈的意見,不過,也許一貫性比某種特定的風格更加重要。象大多數人一樣,我花了很長的時間,來為我的偏好作出一個固定的結論。
我個人使用通常稱為“K&R”的風格。當使用C語言沒有的構造函數時,需要增加新的習慣,這樣就變成了一種有時被稱為“Stroustrup”的風格。例如:
class C : public B {
public:
// ...
};
void f(int* p, int max)
{
if (p) {
// ...
}
for (int i = 0; i<max; ++i) {
// ...
}
}
比大多數布局風格更好,這種風格保留了垂直的空格,我喜歡盡可能地在合理的情況下對齊屏幕。對函數開頭的大括弧的放置,有助于我第一眼就分別出類的定義和函數的定義。
縮進是非常重要的。
設計問題,諸如作為主要接口的抽象基類的使用,使用模板以表現有彈性的類型安全的抽象,以及正確地使用異常以表現錯誤,比布局風格的選擇要重要得多。
我應該將“const”放在類型之前還是之后?
我把它放在前面,但那僅僅是個人愛好問題!癱onst T”和“T const”總是都被允許的,而且是等效的。例如:
const int a = 1; // ok
int const b = 2; // also ok
我猜想第一種版本可能會讓少數(更加固守語法規范)的程序員感到迷惑。
為什么?當我發明“const”(最初的名稱叫做“readonly”,并且有一個對應的“writeonly”)的時候,我就允許它出現在類型之前或之后,因為這樣做不會帶來任何不明確。標準之前的C和C++規定了很少的(如果有的話)特定的順序規范。
文章來源于領測軟件測試網 http://www.kjueaiud.com/