June 26,2009
C 的 && 與 ||
前一陣子看Javascript 語言精髓與編程實踐這本書的時候,發現可以用 && 來達到 if ,用 || 達到 if not 的效果,所以下面是以 C/C++ 實驗的結果:
#include <stdio.h>
int say_hello( void )
{
printf("Hello world!!\n");
return 0;
}
int main( int argc, char* argv[] )
{
int flag=0;
printf("flag=0\n");
flag && say_hello(); // say_hello() won't be invoked
flag || say_hello(); // say_hello() will be invoked
printf("flag=1\n");
flag=1;
flag && say_hello(); // say_hello() will be invoked
flag || say_hello(); // say_hello() won't be invoked
return 0;
}
不過坦白說,這樣寫的結果是導致可讀性變差,只有自己維護這份 code 時,那是可以用,很多人維護一份 code 時,最好還是避免,或者,加上註解比較好。
我想 c# / java 應該也可以這樣作。
p.s. 如果不是呼叫函數的話,記得要使用 ( ),例如:
i && (j=100);這就等同於:
if(i) j=100;
引用URL
http://cgi.blog.roodo.com/trackback/9316397
回應文章 

&&的作法比較常見,||的作法就我看過的大部份是用在不管say_hello()的結果是什麼都要做某件事的時候,也就是if(1 || say_hello()) { ... }
Posted by Michael
at June 26,2009 23:41
c/c++ 裡,的確 && 的作法比較常見。
但在 python、ruby、boo 等語言裡,其實 || 也很常見。
就我所知 boo 裡有 unless 關鍵字,用來表示 if not,例如:i=100 unless i
但在 python、ruby、boo 等語言裡,其實 || 也很常見。
就我所知 boo 裡有 unless 關鍵字,用來表示 if not,例如:i=100 unless i
Posted by elleryq
at June 28,2009 02:41
有趣~~
另, Michael, if(1 || say_hello()) { ... } 是永遠不執行 say_hello() 喔.
另, Michael, if(1 || say_hello()) { ... } 是永遠不執行 say_hello() 喔.
Posted by fr3@K
at July 14,2009 00:47