推 NDark: 應該是指定某一已知記憶體的數值 05/14 13:58
→ NDark: 具體來說要看那塊記憶體有什麼特殊 05/14 13:58
推 DarkIllusion: 抱歉 我不太懂你對哪個部分不懂? 05/14 14:00
推 OyodoKai: 哪裡看不懂? 05/14 14:00
推 ccpz: =右邊的部分,是把字串當陣列,去抓出某個 char 而已 05/14 14:02
推 TheOneisNEO: 就排排站然後取index吧 你把那一長串字串先assign給 05/14 14:16
→ TheOneisNEO: 另外一個變數也可以 05/14 14:16
有人將它帶換成這兩行,然後我就看懂了
char no_name[72]="zyxwvutsrqponmlkjihgfedcba9876543210~ vwxyz";
*ptr++ = no_name[35 + (tmp_value - value * base)];
感謝csfgsj的私下解答
※ 編輯: wsad50232 (36.229.25.207 臺灣), 05/14/2022 14:23:35
推 NDark: 基本上賣弄技巧的程式碼都是軟體工程的大敵 05/14 16:53
→ NDark: 在我手下 有人敢這樣寫 我一定背後記住 05/14 16:54
推 TwitchGod: 看不懂這該回去重修大一程設吧 05/14 17:02
推 Belieeve: 看來是道行高深的忍者呢 05/14 17:23
→ wulouise: 不會看不懂 可是code review不被電很奇怪 05/14 17:24
推 steve1012: 這根本過不了code review 05/14 17:43
推 calqlus: 阿就atoi的封裝寫法 05/14 17:44
推 calqlus: 平常會用查內建函式就很不錯了 05/14 17:47
推 ManOfSteel: 不會看不懂,但是看這個心情會很差... 05/14 18:54
→ ssccg: 轉換用先建好的表 + 算index查表算是很平常的做法吧? 05/14 19:05
→ ssccg: 單純抓這一行來看才會一時看不懂,原本的函式很好懂啊 05/14 19:06
→ ssccg: 覺得這篇的問法有點斷章取義 05/14 19:09
推 Gaogaigar: 前面註解寫個LUT 我review 會給過 05/14 20:36
推 jayd: 這種寫法code review絕對被靠北 05/14 20:54
→ shadow0326: 這不是賣弄,而是偷懶吧 05/14 22:50
推 shownlin: 這個用法覺得還算正常...最近在碰device tree compiler 05/15 01:38
→ shownlin: 裡面的checker也是這樣建表的 05/15 01:38
→ shownlin: 大家review的規則比大神還嚴欸0.0 05/15 01:39
推 CoNsTaR: 很多人對爛 code 的定義就是只要我看不懂就是爛 code 05/15 02:52
→ CoNsTaR: code smell 的定義就是只要不合我的意就是 code smell 05/15 02:52
→ CoNsTaR: 結果自己寫出來的反而笑死人 05/15 02:52
推 wei115: 還好吧 就把字串當陣列用阿 其實我覺得*ptr++還要想一下(x 05/15 02:56
→ netburst: 真 05/15 03:31
推 sunsamy: 也許人家是刷題仔,刷題很多這種賣弄技巧的寫法,解法 05/15 04:01
推 OnlyRD: c型別系統和指針不熟才會看不懂吧?另外說review不 05/15 09:11
→ OnlyRD: 會過,大部分 05/15 09:11
→ OnlyRD: 應該都是在做上層應用的人,原程式是為了解決itoa 05/15 09:11
→ OnlyRD: 並不在c標準的 05/15 09:11
→ OnlyRD: 問題,因此才產生這份code,當然對於效能和記憶體 05/15 09:11
→ OnlyRD: 的要求就遠高於 05/15 09:11
→ OnlyRD: 易讀,畢竟各位上層高手幾個人會去看c標準庫的實作 05/15 09:11
→ OnlyRD: ?toolchain自 05/15 09:11
→ OnlyRD: 帶標準庫通常也都只有程式庫和標頭檔而已。但這類 05/15 09:11
→ OnlyRD: 缺乏易讀性很像 05/15 09:11
→ OnlyRD: 在玩技巧的實作方法,越底層的庫越多,都是有它的 05/15 09:11
→ OnlyRD: 理由的,又不是 05/15 09:11
→ OnlyRD: 吃飽閒著。而且這段code對寫c的人很基本吧?看不懂 05/15 09:11
→ OnlyRD: 的人你才要擔 05/15 09:11
→ OnlyRD: 心他會不會製造許多型別轉換和指標操作的詭異bug。 05/15 09:11
→ shooter555: 很少看到不先把常數字串先定義好再用的寫法 05/15 09:16
→ shooter555: 給個變數名 後人還能知道這串是什麼碗糕 05/15 09:17
推 sanctitysky: 對c來說 很清楚常見 05/15 09:18
推 yupog2003: 推OnlyRD,易讀性和效能有時候沒辦法兼顧,看需求而已 05/15 09:34
→ sazabijiang: 這就是為什麼會有Java的誕生 05/15 11:45
推 Bencrie: 有標準的 snprintf 要這個幹嘛? 05/15 12:34
推 wulouise: 底層library跟上層應用的review標準不同,我是以上層看 05/15 14:12
→ labbat: 去跟主管講唄,說服網友幹嘛 05/15 14:15
推 sazabijiang: 一個後人無法容易維護的程式碼,就是爛的程式碼 05/15 14:22
推 bnd0327: 這行就是沒有要讓人維護的,這是基礎函式,不是商業邏輯 05/15 16:21
→ sazabijiang: 然後會出錯的地方,就是這種沒打算讓人維護的地方 05/15 16:32
→ brucetu: 寫底層的跟寫商業邏輯的在討論可讀性 05/15 17:57
→ brucetu: 目的就不同 作法當然不同 05/15 17:58
推 brucetu: code review看到這段code出現在itoa的實作裡面 05/15 18:00
→ brucetu: 還感覺不出是在做什麼操作的 是review的人有問題吧? 05/15 18:00
→ brucetu: review本來就要看整個context啊 05/15 18:00
推 Bencrie: 不要可讀那不考慮直上 asm 嗎? 05/15 18:50
→ Firstshadow: 這個很好讀吧 哪裡不好讀== 05/15 19:16
推 shownlin: kernel裡面不就一堆.s 05/15 19:47
推 shownlin: 話說這一段code明明就很直白 05/15 19:50
→ shownlin: 硬要扯說看不懂也太扯 05/15 19:50
→ acgotaku: 大家這麼兇 以後誰敢問問題 05/15 20:27
推 acgotaku: 但會這樣寫的,有點像是程式新手 05/15 20:30
推 knme: code review看到這個,會希望前面多個註解 05/15 20:32
推 shownlin: 原來GCC底層是一群新手寫的嗎…… 05/15 20:52
推 wulouise: 本來code review就是根據維護人的能力來評估的 05/15 21:08
→ wulouise: 實際上不會有這麼多人都有維護gcc底層的能力 05/15 21:09
→ sarafciel: 新手才不敢這樣寫啦 要看懂這段code會吃對指標的理解 05/15 22:37
推 manmay: 常數字串查表比額外宣告一個區域變數快很多吧 05/16 00:44
推 hengsao: 一群能力不到的人對自己能力不到的程式庫該怎麼實作很有 05/16 04:57
→ hengsao: 意見== 05/16 04:57
→ shooter555: 不提前宣告這串char 而丟在loop裡面 不知道是什麼操作 05/16 09:34
→ shooter555: 是我是不會這樣寫 05/16 09:35
→ shooter555: 前面推文有提到理由 那這邊的理由不知道是什麼 有高手 05/16 09:37
→ shooter555: 知道的嗎 05/16 09:37
噓 xxtuoo: 這幾行看不懂的 才該被注意Zzz 05/16 09:43
→ ssccg: 常數丟在loop裡還是常數,就只用在這為什麼要另外生個變數? 05/16 11:38
→ freef1y3: compiler沒這麼笨 你就算先生個變數存也不會比較慢啦.. 05/16 11:45
推 aasssdddd: 第一次看到 長姿勢了 不管寫法一定有地方特別存那字串 05/16 12:38
→ ssccg: 不是說快慢有差,是在回兩樓前的,為什麼要提前宣告? 05/16 12:46
推 labbat: 一大串人類看不懂啊,宣告就是逐步做一大串做的事情 05/16 13:30
→ sarafciel: 不會比較慢其實不好說XD 要看你變數型態怎麼給 05/16 14:01
→ sarafciel: compiler不笨沒錯 但compiler會為了programmer變笨 05/16 14:02
→ sarafciel: 然後你知道函式是itoa的話,要理解那個字串的意圖不難 05/16 14:06
→ sarafciel: 在這個前提下,他這樣寫的用意我猜是scope 05/16 14:06
→ sarafciel: 就跟anonymous function的目的一樣,只在某處只用一次 05/16 14:07
→ sarafciel: 如果你把這個表拉出去迴圈外,作為reviewer 05/16 14:08
→ sarafciel: 第一時間看會假定這個字串在函式內有好幾個地方用到 05/16 14:08
→ sarafciel: 而他這樣寫相當於告訴你scope鎖死在這一行 05/16 14:09
→ brucetu: 到底是*ptr++=真的沒那麼難懂 05/16 21:09
→ brucetu: 字串查表也很常見 05/16 21:10
→ brucetu: 很多爛程式可讀性差是因為物件之間的關係混亂 職權不清。 05/16 21:14
→ brucetu: 看不懂這行的叫做語法不熟 不是他寫成一行可讀性差 05/16 21:14
推 manmay: c語言標準有定義 常數字串的storage duration 05/17 00:51
→ manmay: C99 $6.7.8 Initialization 05/17 00:51
推 descent: c 博大精深, 真的有很多沒看過的用法。 05/17 17:58
推 descent: 另外char no_name[72]="z.." 可能應該要改 05/17 18:01
→ descent: const char *no_name = "z..." 比較恰當 05/17 18:01
→ oToToT: 上面那樣改的話no_name還是會被指去不同地方,可能還是不 05/17 18:16
→ oToToT: 太好? 05/17 18:16
推 descent: 這問題也可以 po 到 c_cpp 版 05/17 20:26
推 newking761: 如果我是你老闆,你大概離職了 05/18 08:34
→ wsad50232: 樓上可能不適合當老闆 05/18 11:34
推 Isaea: c最多這種把好幾行濃縮在一行的寫法,老實的拆開不好嗎 05/18 12:37
推 sazabijiang: 炫技 05/18 17:34
→ eva19452002: 寫個可讀性高的程式碼會犧牲很多效能嗎? 05/20 17:59
推 OnlyRD: compiler會把c string放到字串section,程式啟動後 05/21 15:49
→ OnlyRD: 初始化,整段 05/21 15:49
→ OnlyRD: 操作只是計算記憶體中的偏移量再去計算而已。以為c 05/21 15:49
→ OnlyRD: 碼農應該都對c 05/21 15:49
→ OnlyRD: ompiler不陌生才對,因為c就是貼近底層的語言。整 05/21 15:49
→ OnlyRD: 串看下來,好像 05/21 15:49
→ OnlyRD: 不少人對語言標準、編譯器都沒啥掌握,避開底層工 05/21 15:49
→ OnlyRD: 作吧。 05/21 15:49
推 cia1099: 不會到看不懂,只是要回想思考一下,這就會讓人憤怒 05/21 20:32
→ wulouise: 歷史因素 就像++i i++現在幾乎沒差除非compiler很爛 05/21 20:51
推 wulouise: 有些時候當時那樣寫效率最高 但是現在不這樣寫不一定差 05/21 21:23
推 OnlyRD: 樓上,要看你的i是什麼type,c++會更複雜一點,而 05/22 03:48
→ OnlyRD: 且在某些支援特 05/22 03:48
→ OnlyRD: 殊指令的cpu上有差別。另外++i和i++的語意不同,怎 05/22 03:48
→ OnlyRD: 麼會沒差?如 05/22 03:48
→ OnlyRD: 果是c++,換成class和template再試試看就知道了。 05/22 03:48
推 wulouise: 可能我省略太多,是單行的i++;跟++i;不是所有情況 05/22 14:26
推 DoubleFree: 看不懂就是爛code 我還滿同意的 05/24 10:30
→ DoubleFree: 明明有更清楚的寫法幹嘛弄成跟大便一樣 05/24 10:30
推 ohohohya: 基本上你待在公司就寫符合公司coding style的code就好 06/04 05:59
→ ohohohya: 了 這段老實講沒到會被reviewer打槍的程度 大意也只是 06/04 05:59
→ ohohohya: 從字串中間開始計算要拿哪個index字元的ascii加回*ptr 06/04 05:59
→ ohohohya: 的內容而已 06/04 05:59