三月 2, 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要給我排整齊啦!

十一月 6, 2007
» C++0x 的新東西

在 PLNews 上看到有人整理了最近一次委員會討論的內容: Trip Report: April 2007 ISO C++ Standards Meeting Trip Report: July 2007 ISO C++ Standards Meeting Trip Report: October 2007 ISO C++ Standards Meeting 整理一下目前比較感興趣的 feature Template aliases (typedef templates) n2258.pdf template<typename era> using Gundam = MobileSuit<dual_eye, antenna, era>; Gundam<UC> RX78; //真是爛例子 不過臨時想的就別太在意了 要當作單純的 generic typedef 來使用也是可以的 Variadic templates (type varargs for templates) n2087.pdf n2242.pdf 簡單來說就是變動長度的模板參數,proposal 實作了一個 printf 當作例子 用來實作 tuple 也很方便 (boost::tuple [...]

» C++0x 的新東西

在 PLNews 上看到有人整理了最近一次委員會討論的內容:

biggo.com.tw

A Django site.