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