[請益] 這是什麼語法 (for C)?

看板Soft_Job (軟體人)作者 (GGYY)時間1年前 (2022/05/14 13:52), 1年前編輯推噓50(51180)
留言132則, 46人參與, 1年前最新討論串1/2 (看更多)
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; 在這邊看到的 https://stackoverflow.com/questions/8257714/how-to-convert-an-int-to-string-in-c 不怕各位笑,小弟摸C語言這麼久,今天第一次看到這種寫法 看了半天,實在是不知道是什麼意思 程式碼我Compile過,確定是可以編譯可以Run的 有高手能給個解答嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.229.25.207 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1652507531.A.5E9.html

05/14 13:58, 1年前 , 1F
應該是指定某一已知記憶體的數值
05/14 13:58, 1F

05/14 13:58, 1年前 , 2F
具體來說要看那塊記憶體有什麼特殊
05/14 13:58, 2F

05/14 14:00, 1年前 , 3F
抱歉 我不太懂你對哪個部分不懂?
05/14 14:00, 3F

05/14 14:00, 1年前 , 4F
哪裡看不懂?
05/14 14:00, 4F

05/14 14:02, 1年前 , 5F
=右邊的部分,是把字串當陣列,去抓出某個 char 而已
05/14 14:02, 5F

05/14 14:16, 1年前 , 6F
就排排站然後取index吧 你把那一長串字串先assign給
05/14 14:16, 6F

05/14 14:16, 1年前 , 7F
另外一個變數也可以
05/14 14:16, 7F
有人將它帶換成這兩行,然後我就看懂了 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

05/14 16:53, 1年前 , 8F
基本上賣弄技巧的程式碼都是軟體工程的大敵
05/14 16:53, 8F

05/14 16:54, 1年前 , 9F
在我手下 有人敢這樣寫 我一定背後記住
05/14 16:54, 9F

05/14 17:02, 1年前 , 10F
看不懂這該回去重修大一程設吧
05/14 17:02, 10F

05/14 17:23, 1年前 , 11F
看來是道行高深的忍者呢
05/14 17:23, 11F

05/14 17:24, 1年前 , 12F
不會看不懂 可是code review不被電很奇怪
05/14 17:24, 12F

05/14 17:43, 1年前 , 13F
這根本過不了code review
05/14 17:43, 13F

05/14 17:44, 1年前 , 14F
阿就atoi的封裝寫法
05/14 17:44, 14F

05/14 17:47, 1年前 , 15F
平常會用查內建函式就很不錯了
05/14 17:47, 15F

05/14 18:54, 1年前 , 16F
不會看不懂,但是看這個心情會很差...
05/14 18:54, 16F

05/14 19:05, 1年前 , 17F
轉換用先建好的表 + 算index查表算是很平常的做法吧?
05/14 19:05, 17F

05/14 19:06, 1年前 , 18F
單純抓這一行來看才會一時看不懂,原本的函式很好懂啊
05/14 19:06, 18F

05/14 19:09, 1年前 , 19F
覺得這篇的問法有點斷章取義
05/14 19:09, 19F

05/14 20:36, 1年前 , 20F
前面註解寫個LUT 我review 會給過
05/14 20:36, 20F

05/14 20:54, 1年前 , 21F
這種寫法code review絕對被靠北
05/14 20:54, 21F

05/14 22:50, 1年前 , 22F
這不是賣弄,而是偷懶吧
05/14 22:50, 22F

05/15 01:38, 1年前 , 23F
這個用法覺得還算正常...最近在碰device tree compiler
05/15 01:38, 23F

05/15 01:38, 1年前 , 24F
裡面的checker也是這樣建表的
05/15 01:38, 24F

05/15 01:39, 1年前 , 25F
大家review的規則比大神還嚴欸0.0
05/15 01:39, 25F

05/15 02:52, 1年前 , 26F
很多人對爛 code 的定義就是只要我看不懂就是爛 code
05/15 02:52, 26F

05/15 02:52, 1年前 , 27F
code smell 的定義就是只要不合我的意就是 code smell
05/15 02:52, 27F

05/15 02:52, 1年前 , 28F
結果自己寫出來的反而笑死人
05/15 02:52, 28F

05/15 02:56, 1年前 , 29F
還好吧 就把字串當陣列用阿 其實我覺得*ptr++還要想一下(x
05/15 02:56, 29F

05/15 03:31, 1年前 , 30F
05/15 03:31, 30F

05/15 04:01, 1年前 , 31F
也許人家是刷題仔,刷題很多這種賣弄技巧的寫法,解法
05/15 04:01, 31F

05/15 09:11, 1年前 , 32F
c型別系統和指針不熟才會看不懂吧?另外說review不
05/15 09:11, 32F

05/15 09:11, 1年前 , 33F
會過,大部分
05/15 09:11, 33F

05/15 09:11, 1年前 , 34F
應該都是在做上層應用的人,原程式是為了解決itoa
05/15 09:11, 34F

05/15 09:11, 1年前 , 35F
並不在c標準的
05/15 09:11, 35F

05/15 09:11, 1年前 , 36F
問題,因此才產生這份code,當然對於效能和記憶體
05/15 09:11, 36F

05/15 09:11, 1年前 , 37F
的要求就遠高於
05/15 09:11, 37F

05/15 09:11, 1年前 , 38F
易讀,畢竟各位上層高手幾個人會去看c標準庫的實作
05/15 09:11, 38F
還有 54 則推文
05/16 14:07, 1年前 , 93F
就跟anonymous function的目的一樣,只在某處只用一次
05/16 14:07, 93F

05/16 14:08, 1年前 , 94F
如果你把這個表拉出去迴圈外,作為reviewer
05/16 14:08, 94F

05/16 14:08, 1年前 , 95F
第一時間看會假定這個字串在函式內有好幾個地方用到
05/16 14:08, 95F

05/16 14:09, 1年前 , 96F
而他這樣寫相當於告訴你scope鎖死在這一行
05/16 14:09, 96F

05/16 21:09, 1年前 , 97F
到底是*ptr++=真的沒那麼難懂
05/16 21:09, 97F

05/16 21:10, 1年前 , 98F
字串查表也很常見
05/16 21:10, 98F

05/16 21:14, 1年前 , 99F
很多爛程式可讀性差是因為物件之間的關係混亂 職權不清。
05/16 21:14, 99F

05/16 21:14, 1年前 , 100F
看不懂這行的叫做語法不熟 不是他寫成一行可讀性差
05/16 21:14, 100F

05/17 00:51, 1年前 , 101F
c語言標準有定義 常數字串的storage duration
05/17 00:51, 101F

05/17 00:51, 1年前 , 102F
C99 $6.7.8 Initialization
05/17 00:51, 102F

05/17 17:58, 1年前 , 103F
c 博大精深, 真的有很多沒看過的用法。
05/17 17:58, 103F

05/17 18:01, 1年前 , 104F
另外char no_name[72]="z.." 可能應該要改
05/17 18:01, 104F

05/17 18:01, 1年前 , 105F
const char *no_name = "z..." 比較恰當
05/17 18:01, 105F

05/17 18:16, 1年前 , 106F
上面那樣改的話no_name還是會被指去不同地方,可能還是不
05/17 18:16, 106F

05/17 18:16, 1年前 , 107F
太好?
05/17 18:16, 107F

05/17 20:26, 1年前 , 108F
這問題也可以 po 到 c_cpp 版
05/17 20:26, 108F

05/18 08:34, 1年前 , 109F
如果我是你老闆,你大概離職了
05/18 08:34, 109F

05/18 11:34, 1年前 , 110F
樓上可能不適合當老闆
05/18 11:34, 110F

05/18 12:37, 1年前 , 111F
c最多這種把好幾行濃縮在一行的寫法,老實的拆開不好嗎
05/18 12:37, 111F

05/18 17:34, 1年前 , 112F
炫技
05/18 17:34, 112F

05/20 17:59, 1年前 , 113F
寫個可讀性高的程式碼會犧牲很多效能嗎?
05/20 17:59, 113F

05/21 15:49, 1年前 , 114F
compiler會把c string放到字串section,程式啟動後
05/21 15:49, 114F

05/21 15:49, 1年前 , 115F
初始化,整段
05/21 15:49, 115F

05/21 15:49, 1年前 , 116F
操作只是計算記憶體中的偏移量再去計算而已。以為c
05/21 15:49, 116F

05/21 15:49, 1年前 , 117F
碼農應該都對c
05/21 15:49, 117F

05/21 15:49, 1年前 , 118F
ompiler不陌生才對,因為c就是貼近底層的語言。整
05/21 15:49, 118F

05/21 15:49, 1年前 , 119F
串看下來,好像
05/21 15:49, 119F

05/21 15:49, 1年前 , 120F
不少人對語言標準、編譯器都沒啥掌握,避開底層工
05/21 15:49, 120F

05/21 15:49, 1年前 , 121F
作吧。
05/21 15:49, 121F

05/21 20:32, 1年前 , 122F
不會到看不懂,只是要回想思考一下,這就會讓人憤怒
05/21 20:32, 122F

05/21 20:51, 1年前 , 123F
歷史因素 就像++i i++現在幾乎沒差除非compiler很爛
05/21 20:51, 123F

05/21 21:23, 1年前 , 124F
有些時候當時那樣寫效率最高 但是現在不這樣寫不一定差
05/21 21:23, 124F

05/22 03:48, 1年前 , 125F
樓上,要看你的i是什麼type,c++會更複雜一點,而
05/22 03:48, 125F

05/22 03:48, 1年前 , 126F
且在某些支援特
05/22 03:48, 126F

05/22 03:48, 1年前 , 127F
殊指令的cpu上有差別。另外++i和i++的語意不同,怎
05/22 03:48, 127F

05/22 03:48, 1年前 , 128F
麼會沒差?如
05/22 03:48, 128F

05/22 03:48, 1年前 , 129F
果是c++,換成class和template再試試看就知道了。
05/22 03:48, 129F

05/22 14:26, 1年前 , 130F
可能我省略太多,是單行的i++;跟++i;不是所有情況
05/22 14:26, 130F

05/24 10:30, 1年前 , 131F
看不懂就是爛code 我還滿同意的
05/24 10:30, 131F

05/24 10:30, 1年前 , 132F
明明有更清楚的寫法幹嘛弄成跟大便一樣
05/24 10:30, 132F
文章代碼(AID): #1YVqEBNf (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1YVqEBNf (Soft_Job)