[心得] 你所不知道的C語言 - 小測驗

看板C_and_CPP作者 (殺.人.鬼)時間16年前 (2009/06/06 20:38), 編輯推噓9(906)
留言15則, 7人參與, 最新討論串1/2 (看更多)
※ [本文轉錄自 Soft_Job 看板] 作者: ibmibmibm (殺.人.鬼) 看板: Soft_Job 標題: Re: [心得] 程式設計師應該懂多少? 時間: Sun Jun 7 04:36:23 2009 今天在編 2.4 kernel 的時候, 學到了一個我之前都不知道的東西, 寫出來考考大家。 #include <stdio.h> int main() { int x = 5; ((void)0, x)++; printf("%d\n", x); return 0; } 請問這段程式碼有什麼問題?為什麼? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.237.164 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.237.164

06/07 05:06, , 1F
comma operator的運算結果是r-value
06/07 05:06, 1F

06/07 05:09, , 2F
答對了XD
06/07 05:09, 2F

06/07 05:10, , 3F
而且C++的comma運算結果是l-value
06/07 05:10, 3F

06/07 08:18, , 4F
查了一下,C++ Primer有寫,comma原本會傳回最右邊的且是左值
06/07 08:18, 4F

06/07 08:19, , 5F
即原本是要傳回x而非5,應該是多了()後,就會取出5來變成做5++
06/07 08:19, 5F

06/07 08:21, , 6F
以前大學用的中文書完全不會提這個,今天才知道comma是這樣子
06/07 08:21, 6F

06/07 08:25, , 7F
用VC把上面的編成C++還是會做x++,最後印出6,搞錯
06/07 08:25, 7F

06/07 08:38, , 8F
推一個
06/07 08:38, 8F

06/07 08:57, , 9F
學了新的東西 推~~
06/07 08:57, 9F

06/07 09:32, , 10F
不過就1f說的,x應該不能說他是r-value吧?只能說最右邊
06/07 09:32, 10F

06/07 12:42, , 11F
推一個XD
06/07 12:42, 11F

06/07 15:52, , 12F
((void)911,x)++ 不是更夠味嗎? 故弄玄虛, 開完笑啦!
06/07 15:52, 12F

06/07 17:11, , 13F
看不懂這個玩笑耶...把0改成911什麼意思?
06/07 17:11, 13F

06/08 01:00, , 14F
都是constant也沒被參考到,compiler也就不理(void)911
06/08 01:00, 14F

06/08 03:14, , 15F
謝謝
06/08 03:14, 15F
文章代碼(AID): #1AAjFZki (C_and_CPP)
文章代碼(AID): #1AAjFZki (C_and_CPP)