星期一, 3月 02, 2009

不縮排就搗蛋!

louis今天跟我討論XPCOM文件上這一段應該是要很簡單的C++ snippet,

基本上我XPCOM不熟, C++尚可,

拿來文件上的Code大概長的像這樣:

NS_IMETHODIMP SampleFactory::QueryInterface(const nsIID &aIID,void **aResult)
{
if (aResult == NULL) {
return NS_ERROR_NULL_POINTER;
}
*aResult = NULL;
if (aIID.Equals(kISupportsIID)) {
*aResult = (void *) this;
}
else
if (aIID.Equals(kIFactoryIID)) {
*aResult = (void *) this;
}
if (aResult != NULL) {
return NS_ERROR_NO_INTERFACE;
}
AddRef();
return NS_OK;
}



看來看去實在是讓我皺眉頭...

哪有aResult等於NULL也return

不等於NULL也return

然後return完後面還有code的道理

反正這code看起來就是怪怪的, 但一下子卻看不出怪在哪...

因為...

...

這沒縮排又排的亂七八糟的code我是要怎麼讀啦!!!???

...

反正就是看的很難過 有股想把code拿去倒掉的衝動

後來才發現真正的文件裡長的是這樣:

NS_IMETHODIMP
SampleFactory::QueryInterface(const nsIID &aIID,
void **aResult)
{
if (aResult == NULL) {
return NS_ERROR_NULL_POINTER;
}
*aResult = NULL;
if (aIID.Equals(kISupportsIID)) {
*aResult = (void *) this;
}
else if (aIID.Equals(kIFactoryIID)) {
*aResult = (void *) this;
}

if (*aResult == NULL) {
return NS_ERROR_NO_INTERFACE;
}
AddRef();
return NS_OK;
}



我咧 這一縮排 會不會感覺差太多

連這段code snippet不用註解 要表達什麼都能看的清清楚楚.

雖然我不是很熟XPCOM, 也清楚看的出:

1. 在aIID是SupportsIID或FactoryIID的情況下

*aResult不會是NULL 而如果不是SupportsIID或FactoryIID就該回傳NS_ERROR_NO_INTERFACE;

2. 原先的code把倒數第六行if (*aResult == NULL)誤值成if (aResult == NULL) 是錯的...

跟之前不知在寫什麼時不同, 馬上就看出問題點在哪...

==

我還是常聽到有人說什麼python強制縮排怎樣怎樣的...

我只想說,

人要衣裝

佛要金裝

Code要給我排整齊啦!

2 則留言:

tomubuntu2008 提到...

Python 就是要縮排XD,才會處理下一步,p.s.使徒大人您最近好嗎?

安爸 提到...

你可以用astyle叫他排好阿~