[請益] 這是什麼語法 (for C)?
*ptr++ =
"zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35+ (tmp_value - value * base)];
在這邊看到的
https://stackoverflow.com/questions/8257714/how-to-convert-an-int-to-string-in-c
不怕各位笑,小弟摸C語言這麼久,今天第一次看到這種寫法
看了半天,實在是不知道是什麼意思
程式碼我Compile過,確定是可以編譯可以Run的
有高手能給個解答嗎?
--
應該是指定某一已知記憶體的數值
具體來說要看那塊記憶體有什麼特殊
抱歉 我不太懂你對哪個部分不懂?
哪裡看不懂?
=右邊的部分,是把字串當陣列,去抓出某個 char 而已
就排排站然後取index吧 你把那一長串字串先assign給
另外一個變數也可以
有人將它帶換成這兩行,然後我就看懂了 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基本上賣弄技巧的程式碼都是軟體工程的大敵
在我手下 有人敢這樣寫 我一定背後記住
看不懂這該回去重修大一程設吧
看來是道行高深的忍者呢
不會看不懂 可是code review不被電很奇怪
這根本過不了code review
阿就atoi的封裝寫法
平常會用查內建函式就很不錯了
不會看不懂,但是看這個心情會很差...
轉換用先建好的表 + 算index查表算是很平常的做法吧?
單純抓這一行來看才會一時看不懂,原本的函式很好懂啊
覺得這篇的問法有點斷章取義
前面註解寫個LUT 我review 會給過
這種寫法code review絕對被靠北
這不是賣弄,而是偷懶吧
這個用法覺得還算正常...最近在碰device tree compiler
裡面的checker也是這樣建表的
大家review的規則比大神還嚴欸0.0
很多人對爛 code 的定義就是只要我看不懂就是爛 code
code smell 的定義就是只要不合我的意就是 code smell
結果自己寫出來的反而笑死人
還好吧 就把字串當陣列用阿 其實我覺得*ptr++還要想一下(x
真
也許人家是刷題仔,刷題很多這種賣弄技巧的寫法,解法
c型別系統和指針不熟才會看不懂吧?另外說review不
會過,大部分
應該都是在做上層應用的人,原程式是為了解決itoa
並不在c標準的
問題,因此才產生這份code,當然對於效能和記憶體
的要求就遠高於
易讀,畢竟各位上層高手幾個人會去看c標準庫的實作
?toolchain自
帶標準庫通常也都只有程式庫和標頭檔而已。但這類
缺乏易讀性很像
在玩技巧的實作方法,越底層的庫越多,都是有它的
理由的,又不是
吃飽閒著。而且這段code對寫c的人很基本吧?看不懂
的人你才要擔
心他會不會製造許多型別轉換和指標操作的詭異bug。
很少看到不先把常數字串先定義好再用的寫法
給個變數名 後人還能知道這串是什麼碗糕
對c來說 很清楚常見
推OnlyRD,易讀性和效能有時候沒辦法兼顧,看需求而已
這就是為什麼會有Java的誕生
有標準的 snprintf 要這個幹嘛?
底層library跟上層應用的review標準不同,我是以上層看
去跟主管講唄,說服網友幹嘛
@Bencrie 見https://bit.ly/3LdC6LV 它比snprintf快
一個後人無法容易維護的程式碼,就是爛的程式碼
這行就是沒有要讓人維護的,這是基礎函式,不是商業邏輯
然後會出錯的地方,就是這種沒打算讓人維護的地方
寫底層的跟寫商業邏輯的在討論可讀性
目的就不同 作法當然不同
code review看到這段code出現在itoa的實作裡面
還感覺不出是在做什麼操作的 是review的人有問題吧?
review本來就要看整個context啊
不要可讀那不考慮直上 asm 嗎?
這個很好讀吧 哪裡不好讀==
kernel裡面不就一堆.s
話說這一段code明明就很直白
硬要扯說看不懂也太扯
大家這麼兇 以後誰敢問問題
但會這樣寫的,有點像是程式新手
code review看到這個,會希望前面多個註解
原來GCC底層是一群新手寫的嗎……
本來code review就是根據維護人的能力來評估的
實際上不會有這麼多人都有維護gcc底層的能力
新手才不敢這樣寫啦 要看懂這段code會吃對指標的理解
常數字串查表比額外宣告一個區域變數快很多吧
一群能力不到的人對自己能力不到的程式庫該怎麼實作很有
意見==
不提前宣告這串char 而丟在loop裡面 不知道是什麼操作
是我是不會這樣寫
前面推文有提到理由 那這邊的理由不知道是什麼 有高手
知道的嗎
這幾行看不懂的 才該被注意Zzz
常數丟在loop裡還是常數,就只用在這為什麼要另外生個變數?
compiler沒這麼笨 你就算先生個變數存也不會比較慢啦..
第一次看到 長姿勢了 不管寫法一定有地方特別存那字串
不是說快慢有差,是在回兩樓前的,為什麼要提前宣告?
一大串人類看不懂啊,宣告就是逐步做一大串做的事情
不會比較慢其實不好說XD 要看你變數型態怎麼給
compiler不笨沒錯 但compiler會為了programmer變笨
然後你知道函式是itoa的話,要理解那個字串的意圖不難
在這個前提下,他這樣寫的用意我猜是scope
就跟anonymous function的目的一樣,只在某處只用一次
如果你把這個表拉出去迴圈外,作為reviewer
第一時間看會假定這個字串在函式內有好幾個地方用到
而他這樣寫相當於告訴你scope鎖死在這一行
到底是*ptr++=真的沒那麼難懂
字串查表也很常見
很多爛程式可讀性差是因為物件之間的關係混亂 職權不清。
看不懂這行的叫做語法不熟 不是他寫成一行可讀性差
c語言標準有定義 常數字串的storage duration
C99 $6.7.8 Initialization
c 博大精深, 真的有很多沒看過的用法。
另外char no_name[72]="z.." 可能應該要改
const char *no_name = "z..." 比較恰當
上面那樣改的話no_name還是會被指去不同地方,可能還是不
太好?
這問題也可以 po 到 c_cpp 版
如果我是你老闆,你大概離職了
樓上可能不適合當老闆
c最多這種把好幾行濃縮在一行的寫法,老實的拆開不好嗎
炫技
寫個可讀性高的程式碼會犧牲很多效能嗎?
compiler會把c string放到字串section,程式啟動後
初始化,整段
操作只是計算記憶體中的偏移量再去計算而已。以為c
碼農應該都對c
ompiler不陌生才對,因為c就是貼近底層的語言。整
串看下來,好像
不少人對語言標準、編譯器都沒啥掌握,避開底層工
作吧。
不會到看不懂,只是要回想思考一下,這就會讓人憤怒
歷史因素 就像++i i++現在幾乎沒差除非compiler很爛
有些時候當時那樣寫效率最高 但是現在不這樣寫不一定差
樓上,要看你的i是什麼type,c++會更複雜一點,而
且在某些支援特
殊指令的cpu上有差別。另外++i和i++的語意不同,怎
麼會沒差?如
果是c++,換成class和template再試試看就知道了。
可能我省略太多,是單行的i++;跟++i;不是所有情況
看不懂就是爛code 我還滿同意的
明明有更清楚的寫法幹嘛弄成跟大便一樣
基本上你待在公司就寫符合公司coding style的code就好
了 這段老實講沒到會被reviewer打槍的程度 大意也只是
從字串中間開始計算要拿哪個index字元的ascii加回*ptr
的內容而已
爆
[問卦] 監察院的作用是什麼啊各位先進好 我姪子最近公民讀到五權分立 其中又有監察權什麼的 他就問我 :「舅舅監察院是幹嘛的」 我回說:「是可以彈劾做不好的官……我不知道」爆
[問卦]天龍人不知道台語「驚人」是骯髒的意思?如題 我有次跟台北下來的天龍人到小吃店吃東西 坐下來說桌子很「驚人」 他竟然反問說為什麼很驚人? 有鬼嗎? 他竟然不知道台語的「驚人」是骯髒的意思???爆
[問題] 新球迷第一次進場建議去誰的主場?大家好 我隔壁版球迷啦 最近因為疫情的關係,沒比賽可以看 但看職棒還能順利進行,最近也會利用YT收看一下精華 說實話 看棒球的經歷已經要追溯到小時候看王建民了爆
[討論] 男方怎麼對待女方的第一次-- =--- 這是匿名代PO 無法聯絡作者喔 ====== ==== 這是匿名代PO 無法聯絡作者喔 ====== ==== 這是匿名代PO 無法聯絡作者喔 ====== (3/21補充)56
[討論] 道歉文&面試準備C語言分享我在稍早時犯下了大錯就是把請益文自刪,害各位大大給我的建議付諸流水,實在非常抱歉 ,我實在是不知道該如何用言語才能表達我的歉意。 我是真心感到非常的後悔,因此還被調侃我是演員 辱罵我是拉基等等字眼,我實在不知道 要怎麼平息網友們的怒火,說真的 我看了非常的傷心,也很能夠理解網友們生氣的點。 這 些我都接受,我被罵被嘴是應該的,也有人不少留言叫我7414 我也接受。64
[討論] 今天第一次看悍將的比賽...因為我有個朋友是兄弟迷,所以來看一下兄弟現在的狀況; (要不然我是跟大師兄跑的) 結果第一次認真看悍將比賽,就看到這種荒謬的賽局... 坦白講,悍將的球迷都不會覺得看他們的比賽,有種要心臟病發或者胃穿孔的感覺嗎? 看慣日職的我,覺得連火腿隊的比賽都比他們精彩一百倍,36
[問卦] 下班在陽台看到!這是鍬形蟲嗎我俊民啦! 今天加班到比較晚 回家時竟然在陽台看到!! 這是鍬形蟲嗎OAO32
[問題] c++是誰生的這是c++ 非常全能 但其父母卻不知道是誰 就在剛剛 我終於發現她是誰生的13
Re: [問卦] C++可以啟發孩子的程式天份嗎?那要看你怎麼定義程式天份 如果是講演算法跟資料結構 用C或Python下去操比較快 如果是講計算機結構 一樣也是用C跟OS下去操 國中時 C++是我第一門接觸的語言 那個時候要做遊戲的難度不低