Re: [討論] 前輩們變數都怎麼命名2?

作者: fatalfeel2 (風在動)   2023-03-17 12:04:16
Linux Coding Style
https://docs.kernel.org/next/translations/zh_TW/process/coding-style.html
第3段
大括號 為何 function 與 判斷式會不同
Linus 本人給出的理由是 function 中不會包著function
即沒有巢狀式的function 而判斷式中會包著判斷式
另一點文中提到的 K&R coding style 也是function與判斷式不同
新型的K&R style function 與 判斷式的左括號統一了
https://gist.github.com/jesseschalken/0f47a2b5a738ced9c845
再來就是自C++11 之後 Function 內可以包著Function
EX: lambdas 表示式
https://stackoverflow.com/questions/4324763/can-we-have-functions-inside-functions-in-c
!!!上述原因 目前的 C++ [判斷式的左括號] 已無規範必要!!!
判斷式的左括號 在行尾或下一行皆可
///////////////////linux coding style///////////////
1) 縮進
制表符是 8 個字符,所以縮進也是 8 個字符。有些異端運動試圖將縮進變爲 4
(甚至 2!) 字符深,這幾乎相當於嘗試將圓周率的值定義爲 3。
理由:縮進的全部意義就在於清楚的定義一個控制塊起止於何處。尤其是當你盯著你的
屏幕連續看了 20 小時之後,你將會發現大一點的縮進會使你更容易分辨縮進。
2)
...略
3) 大括號和空格的放置
C 語言風格中另外一個常見問題是大括號的放置。和縮進大小不同,選擇或棄用某种放
置策略並沒有多少技術上的原因,不過首選的方式,就像 Kernighan 和 Ritchie 展示
給我們的,是把起始大括號放在行尾,而把結束大括號放在行首,所以:
if (x is true) {
we do y
}
不過,有一個例外,那就是函數:函數的起始大括號放置於下一行的開頭,所以:
int function(int x)
{
body of function
}
全世界的異議份子可能會抱怨這個不一致性是… 是的 … 不一致的,不過所有思維健全
的人 都知道
(a) K&R 是 正確的 並且 (b) K&R 是正確的。
此外,不管怎樣函數都是特 殊的 (C 函數是不能嵌套的)。
當只有一個單獨的語句的時候,不用加不必要的大括號。
if (condition)
action();

if (condition)
do_this();
else
do_that();
※ 引述《fatalfeel2 (風在動)》之銘言:
: 程式命名規則 與 Makefile
: 1. 查閱了 ISO 1999 C99, ISO 2011 C++, ISO 2014 C++, ISO 2020 C++,
: https://reurl.cc/gZGz6L
: https://reurl.cc/XLGlq0
: ISO都有基本的命名規則
: 另查閱 微軟 安卓 程式規範
: 微軟 的 命名規則偏向 The Hungarian Naming Convention
: 由2001 制定完整規範, prefix 如ch, sz, p
: https://idleloop.com/hungarian/
: 2. variable prefix naming convention 一定是正確的嗎?
: (a)
: 北美電網程式規範與openPDC 首席設計師 James Ritchie Carroll
: https://www.gridprotectionalliance.org/docs/GPA_Coding_Guidelines_2011_03.pdf
: Page 12 原文貼上
: Do not use Hungarian notation
: Do not abbreviate
: Do not prefix enums, classes, or delegates with any letter
: (b)
: Linux核心的創始者 開源專案Git創始者 Linus Torvalds
: https://www.kernel.org/doc/html/v4.10/process/coding-style.html
: https://slurm.schedmd.com/coding_style.pdf
: 第四章 原文貼上
: Encoding the type of a function into the name (so-called Hungarian notation)
: is brain damaged - the compiler knows the types anyway and can check those,
: and it only confuses the programmer. No wonder MicroSoft makes buggy programs.
: (注意一下這兩位大神coding在意的重點是什麼)
: 3.
: GNU MAKE
: https://www.gnu.org/software/make/manual/make.html
: #dir named with www.gnu.org/software/make/manual/make.html 4.3 16.3 16.5
: SRCDIR = ./source
: OBJDIR = ./obj
: BINDIR = ./bin
: #compile optione with www.gnu.org/software/make/manual/make.html 4.3 16.3 16.5
: $(OBJDIR)/%.o : ./$(SRCDIR)/%.cpp
: $(CXX) -c $(CXXFLAGS) $< -o $@
: #Note: CPPFLAGS at www.gnu.org/software/make/manual/make.html 10.3
: CC
: Program for compiling C programs; default ‘cc’.
: CXX
: Program for compiling C++ programs; default ‘g++’.
: CPPFLAGS
: Extra flags to give to the C preprocessor and programs that use it (the
: C and Fortran compilers).
: CXXFLAGS
: Extra flags to give to the C++ compiler.
: ※ 引述《heaviest (heaviest)》之銘言:
: : 最近開始學C,剛剛把前幾天寫的程式,打開來看
: : 發現變數一時之間完全搞不清楚
: : 明明當初有盡力的取有意義的名稱,然後照著大寫來分開字這樣打
: : 跑去問了學長,他叫我去背單字,他說變數名字取不出來是我單字被太少QQ
: : 請問各位前輩們都怎麼取有意義的名字
作者: stallings (瓜子)   2023-03-17 15:09:00
關於縮排,我比較接受 4 個空格8 個空格我覺得過多了。至於用 tab?嗯...關於區塊,現在好像有人提倡即使只有一行也加括號以使程式碼清楚
作者: tomsawyer (安安)   2023-03-17 16:10:00
vscode的linter會把if弄成大括號跟函數一樣
作者: closer76 (克樓瑟)   2023-03-17 16:43:00
Google open-source style 是 2 空格.... 我一開始不習慣,但用了一段時間覺得也還不錯。 XD
作者: Lipraxde (Lipraxde)   2023-03-17 17:59:00
比起縮幾格,不要搞成五、六層巢狀比較舒服
作者: chuegou (chuegou)   2023-03-17 21:12:00
最後一個就防呆來說不好 misra規範就強制要加大括號 蘋果的goto fail某種程度上也是因為沒加大括號
作者: stallings (瓜子)   2023-03-17 22:14:00
沒在寫 Linux kernel code 就不用理那些了
作者: mmmmei (mmm煤)   2023-03-18 07:27:00
大括號我們組要求要新的一行。理由是這樣比較容易看出一個clause從哪裡開始的
作者: johnjohnlin (嗯?)   2023-03-18 10:37:00
用一個tab縮排就能同時滿足2 4 8空白三種需求
作者: fatalfeel2 (風在動)   2023-03-18 19:23:00
有些ide tab 可以設定 字元數
作者: stallings (瓜子)   2023-03-18 21:25:00
不定寬度正是 tab 的短處啊唯一支持 sp~叭叭叭~
作者: CoNsTaR ((const *))   2023-03-19 14:00:00
我都去找算命的算變數名稱,這樣以後程式有 bug 他比較好通靈
作者: Caesar08 (Caesar)   2023-03-22 19:00:00
不定寬度"是"tab的長處吧。tab可以解釋成各種space長度喜歡2 space的把tab設成2 space,喜歡4 space的就設成4tab應該被大力推廣才對,不懂tab有什麼"缺點"
作者: CoNsTaR ((const *))   2023-03-22 22:32:00
tab 的缺點是除了在你自己的 IDE A裡以外你永遠無法保證tab 和 space 混用的檔案會被 display aligned就算你真的只用 tab 還是會有 misalignment,但只用 space 永遠不會出錯*IDE
作者: madturtle (旅者‧愚人‧夢想家 )   2023-03-24 05:40:00
按照樓上的理論,只用tab也永遠不會出錯。
作者: Caesar08 (Caesar)   2023-03-24 12:35:00
為什麼只用tab會misalignment?你tab不都是等寬嗎?
作者: lycantrope (阿寬)   2023-03-24 12:41:00
用tab一定要跟space混用,除非你所有間隔都用tab
作者: Caesar08 (Caesar)   2023-03-24 19:53:00
為什麼要跟space混用?只有indent用tab,其他才用space
作者: CoNsTaR ((const *))   2023-03-25 09:13:00
除非你的其他字元也都跟 tab 一樣可以自由伸縮,whitespace 全部都用 tab,否則就是會有 misalignment 啊你要怎麼保證你用 tabs indent 的 comments 開頭一定會對齊下一行的某個字元?除了一個參數一行以外,你要怎麼對齊多行的函數參數?你要怎麼保證你的 comments 不會超過 80 或 120 字元寬?更正,要怎麼把你開頭用 tabs indent 的 comments 對齊在80 或 120 字元寬?每行一個 statement,每個 statement 後面都有註解,你要怎麼對齊那些註解?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2023-03-27 09:24:00
想太多。space最大的好處是增加原始碼長度,看起來很多
作者: johnjohnlin (嗯?)   2023-03-28 07:54:00
拿tab縮排 空白對齊就不會亂掉了
作者: CoNsTaR ((const *))   2023-03-28 15:25:00
樓上... tab 和 space 同時存在就是亂掉的主因啊用 tab 縮排之後到底要怎麼做到用 space 對齊?
作者: Caesar08 (Caesar)   2023-03-28 20:41:00
你舉的例子裡只有保證寬度(80或120)是tab做不到的statement後面要把註解對齊,跟tab多寬沒有關係既然縮排是tab,那要對齊的時候也要補tab,而不是space
作者: Lipraxde (Lipraxde)   2023-03-28 22:28:00
對齊 argument、三元運算子,tab 行嗎XD?
作者: Richun (解放左手的OO之力)   2023-03-28 23:02:00
statement後對齊註解跟tab對應寬度很有關係,statement間的字元數落差只要大於一個hard tab寬度就會開始對不齊了。長度落差10個字元,hard tab在這台電腦佔8個,另一台佔4個這時對齊所需的tab數在兩台之間一定會差至少1格。
作者: johnjohnlin (嗯?)   2023-03-29 00:19:00
https://reurl.cc/GeG1gx 網路上找一下tab indentspace align很多,vscode都有外掛了的確我常常看到亂混tab space的會很不爽,但是把握好的話我還沒遇過問題,同時可以滿足不同寬度喜好@Lipraxde 當然不行 tab是"縮排" space才是"對齊"
作者: CoNsTaR ((const *))   2023-03-29 01:26:00
真要混用也是 space indent, tab align 吧@johnjohnlin 貼的那篇只適用於每行縮排都相同的情況而已,要是有一個 block 或 statement 需要多縮一排,不又直接爆炸了?* 誤, space indent tab align 照樣行不通反正回到一開始,space 和 tab 混用就是可能會有問題,通通用 tab 還是可能有問題,不要用就對了
作者: Caesar08 (Caesar)   2023-03-29 01:37:00
甚麼叫做“多縮一排”?那就補一個tab阿,只要indent就用tab,其他才用space,有那麼困難嗎?@johnjohnlin 貼的文章就說明怎麼用tab了。tab又不是拿來取代space,他只是提供indent而已你覺得space很方便,因為不會有亂用的問題。但是tab也有方便的地方,因為每個人喜歡的indent都不同,tab提供了一個抽象層,讓大家可以在不改source code的狀況下得到自己喜歡的style
作者: CoNsTaR ((const *))   2023-03-29 03:03:00
多補一個 tab,然後你用 space 做的 alignment 就壞掉了這樣有很難理解?從來沒有在討論喜歡哪個 style 或哪個方便,從頭到尾討論的都是 tab 會在很多專案被禁止使用的原因我就已經說明 @johnjohnlin 貼的文章會遇到什麼問題了,也從來沒有說過你要用 tab 來取代 space,從頭到尾說的都是 tab 不要和 space 混用我有說過的話你通通不看不理解,我沒說過的話你通通指著我鼻子罵,到底哪一點讓你這麼難接受?
作者: LPH66 (-6.2598534e+18f)   2023-03-29 07:11:00
你的"多縮一排"是指連結文章裡 int var1 var2 這種內縮?那篇文章裡已經明確跟你說了那種叫 alignment 限用 space連結文章開頭那種長條件切行內縮那也是 alignmentindent 只限指在大階層內縮, 多一個 {} 內縮那種是 indent啊我知道啦, 你的"space 做的 alignment 就壞掉了"該不會是某些編輯器會多事的幫你把所有開頭的空白全部換成 tab 那種如果編輯器會多事這樣轉的那當然按個 tab 內縮就全幫你轉了自然就壞光光...當編輯器只懂得「開頭要嘛全 Tab 要嘛全 space」的時候自然是全 space 才不壞事, 但如果編輯器不會多事那當然是用的人有分好 indent 跟 alignment 哪個用哪個就都不會有問題
作者: Caesar08 (Caesar)   2023-03-29 09:27:00
因為你說混用是不行的。@johnjohnlin貼的文章也說可以混用,也有code補充論點。既然你不同意這些觀點,那我想知道實際code是甚麼,你的“內縮一排”是甚麼code
作者: CoNsTaR ((const *))   2023-03-29 11:41:00
根本不存在同不同意的問題,可以就是可以,不行就是不行,不要滑坡我原先的推文就已經告訴你在怎樣的情況下那樣的做法一樣不行,是你不聽不討論不理解根本不是我不講(只要 indentation 不是每行完全相同)相同的 use case 在我更之前的推文也早就已經提到過了https://pastebin.com/UEd8y5aA只要某一行和其他行有不同 indentation, comments 就是不可能對齊而無法對齊的根本原因就是 space 和 tab 混用
作者: Caesar08 (Caesar)   2023-03-29 16:23:00
註解不就這樣對齊嗎? https://pastebin.com/AybKwY6H
作者: yvb   2023-03-29 18:27:00
樓上,問題就是<tab>定位點用8k會對齊時,改為4k未必會對齊.但是要這樣子的方式寫註解, 又要對齊的意義是什麼?有疑慮時就規定<tab>的縮排量吧.
作者: LPH66 (-6.2598534e+18f)   2023-03-29 18:55:00
> 只要 indentation 不是每行完全相同所以看起來你是把所有開頭的 whitespace 全部稱為 indent那這就是定義不同的問題不是誰不聽誰的問題了該連結文章裡的 indent 只稱大排版像長行切斷下面內縮這種開頭 whitespace 該文稱 alignment那一行的內縮會有稱為 indent 跟隨大部隊的內縮以及只有自己有為了對齊文字或顯示斷行歸屬的 alignment(這些都是該文的叫法) 你要全叫它 indent 行啊, 但就說清楚至於 comment, comment 對齊用 whitespace 對該文來說當然是屬於 alignment, 所以自然全得用空白你所點出的跨 indent level 的對齊 comment是啦, 這些對不齊沒錯, 但我不覺得在會時常改動的程式碼中會需要時常因為改程式碼而去調整對齊是一件舒服的事我自己就只會在不常改的地方 (像表格) 這樣做那種地方很少會有跨 indent level 的程式碼需要這樣實際例子大概像這樣 https://i.imgur.com/26IJSWH.png
作者: Caesar08 (Caesar)   2023-03-29 20:03:00
@yvb嗯,我現在才注意到就算都是tab,寬度也會有不同的狀況,但這應該是屬於編輯器怎麼處理tab的問題。不過既然每個人使用的編輯器都不同,那在這code用tab做對齊就是不可能的了
作者: yvb   2023-03-29 21:52:00
不過我個人覺得, 在每行末端註解要對齊這種事太枝微末節了,還不如程式寫整齊,命名適當,以及函式及區段註解寫清楚就夠了.至於程式內容寫得清不清楚漂不漂亮,那則是另一件事.
作者: johnjohnlin (嗯?)   2023-03-30 23:20:00
LPH大大那種不對齊我今天才注意到有這個可能應該是這類型註解真的很少出現https://imgur.com/a/bapZMHo 正確使用都不會亂掉還要我開哪個奇怪的編輯器嗎?Microsoft word 如何https://www.youtube.com/watch?v=X34ZmkeZDos我錯了,你如果這樣用的話會跑掉
作者: wulouise (在線上!=在電腦前)   2023-04-01 22:22:00
我覺得程式有很多可以討論 coding style是最沒有產出的.訂好一起用就好,至於space tab就是不要混用就沒差大多用space的原因就是ide不會亂動space但tab不好說
作者: CoNsTaR ((const *))   2023-04-01 23:45:00
@LPH66 那篇文章對 alignment 和 indentation 的定義和我沒有不一樣啊 @@我也沒有要 promote 把 comments 寫在行尾,我只是試圖用例子解釋當你用 space 去 makeup 另一行的 tab,或是用 tab 去 makeup 另一行的 space 的時候 alignment 就無法被保證
作者: LPH66 (-6.2598534e+18f)   2023-04-02 04:50:00
老實說我也是邊想邊回打字到一半才發現你在強調這個所以後來才補了為什麼我不會去用這種會造成問題的寫法
作者: wulouise (在線上!=在電腦前)   2023-04-02 22:47:00
我大概懂意思 如果有一行註解是\t\t//^^^^ magic你要怎麼樣確保magic指到的位置是對的...應該是無解XD
作者: timofEE (新人)   2023-04-03 04:05:00
對齊的問題好一點的IDE會幫你處理好space跟tab也是 但就是會被寵壞已經好幾次程式跑不起來結果是有幾行是tab或空格反正我現在一律養成用space了
作者: johnjohnlin (嗯?)   2023-04-03 12:34:00
樓上可是這裡不是python版(?
作者: lc85301 (pomelocandy)   2023-04-05 13:22:00
我都用 clang-format 沒在管排版 (owo)
作者: Lhmstu (lhmstu)   2023-04-24 02:21:00
把tab換成幾個空白不就好了,想設幾個就設幾個

Links booklink

Contact Us: admin [ a t ] ucptt.com