C++标点符号

C++ punctuation

本文关键字:标点符号 C++      更新时间:2023-10-16

比实际编程问题更具有社会好奇心...

一千年前,当我上第一堂编程课(Fortran 66)时,仅仅500年前,当我上第一堂C和C++课时,跨语言有一些非常标准的标点符号练习。 我在Basic(颤抖),PL/1,PL/AS,Rexx甚至Pascal中看到它们。 好的,APL2 不是本次讨论的一部分。

每种语言都有自己独特的标点符号。 帕斯卡的句号,福特兰的逗号分隔的do循环,几乎其他人的分号。

据我所知,每种语言也有关键字(if,for,do,while,until等),这些关键字由空格(或左边距)if等设置。

每种语言都有函数,无论它们叫什么的子例程。 一些内置一些用户编码。 它们由<空格|左边距>function_name(参数);衬托。 如 sqrt( x ) 或 rand( y );

最近,似乎有一套新的标点符号规则。 特别是在 C++ 中,初始值设定项被粘在变量声明 int x(0) 的末尾;或 auto_ptr

p(新小玩意); 这总是欺骗我,认为有人在声明函数原型或使用函数作为整数(嗯?

然后"if"

和"for"似乎已经变大了;if(true)for(;;)等。 从什么时候开始,关键字变成了函数。

最后,函数似乎已经摆脱了它们的参数; sqrt (2) 选择 (...)

问题:旧的方式是什么时候消失的,这种新方式开始流行? 除了我之外,还有人觉得阅读很烦人,标点符号的位置用来传达的信息已经消失了? 我非常清楚K&R将{放在"if"或"for"的末尾,以在这里和那里保存一个字节。 不能在这里用这个借口。 空间作为失去可读性的借口随着HDD空间飙升超过100 MiB而死亡。

征求您的想法。 如果有充分的理由这样做,我很乐意学习它,也许再过 50 年我会习惯它。 当然,编译器识别这些(恕我直言)拼写错误并继续前进是件好事,但仅仅因为您可以以这种方式编码并不意味着您必须这样做,对吧?

谢谢!

关于对象和函数声明之间偶尔出现的歧义,你当然是正确的 C++,搜索"最烦人的解析"。但是,如果您总是感到困惑,那么那只是意味着您不太擅长阅读C++。你应该通过练习来改进。但无论如何,众所周知C++主要设计不是为了易于阅读,尤其是在没有练习的情况下。它还有其他设计优先级。不是每个人都有这些优先事项,这就是为什么不是每个人都使用C++。

至于将条件括在括号中,欢迎您写

if (foo) { bar; }

而不是

if(foo) { bar; }

为了在if的语法和函数调用的语法之间创建人为的区别。C 对空格完全放松,只要词法分析器可以找到标记之间的边界,所以剩下的就是样式,而不是语言。如果你想知道这种关于空白的放松是什么时候开始的——我想是在ALGOL语言家族发展过程中的某个时候。我不知道ALGOL58,但那将是一个检查它是否存在的地方。

我很确定你的一些"旧方式"语言使用括号在表达式中进行分组,以及将函数参数括起来,所以你声称的括号作为函数调用封闭器的真正含义实际上从未存在过。

我不认为我曾经将 C 或 C++ 程序中的if误认为函数调用,我认为你应该学会不要这样做。如果人们用决心if宏做奇怪的事情,毫无疑问,他们会让我感到困惑。但是,从来没有人声称C风格的宏不会引起混淆。

如果你的主要主张是所有语言都应该以大致相似的方式标点符号,那么请查看Lisp和Ruby。希望你能吹一个垫圈,然后克服它;-)

我非常清楚K&R将{放在"if"或"for"的末尾 在这里和那里保存一个字节。不能在这里用这个借口

这可能就是里奇把它放在那里的原因,但这不是我把它放在那里的原因。我把它放在那里主要是为了节省垂直空间。这在今天仍然有限:我的硬盘可能能够存储我编写的每一行代码,其容量的一小部分,但我仍然使用显示器的整个高度来读取代码,提供或拿走一些屏幕家具。我很确定{ - on-a-line-on-its-own是由那些不喜欢通过一次在屏幕上显示多个功能而使事情复杂化的人发明的。额外的垂直空白巧妙地防止了这一点,并且还比更紧凑的样式对适合屏幕的功能的复杂性施加了更严格的限制。

Python 为每个块节省了另一行垂直空间,完全不打扰开闭标点符号,尽管我不认为这就是 GvR 这样做的原因

总之,我认为我的答案是"不",并不是每个人都确切地分享您对代码格式的好恶。还是我的。可能也是一件好事。

由于

C++,Java,C#和其他现代语言是高级语言,所有这些关键字都使它们更容易理解和"友好"。它们应该尽可能接近我们的共同语言。不时更改"默认"标点符号,以使代码看起来更好,更清晰和可读。这一切都是为了使程序员的工作更轻松。

现在,许多框架,如Visual Studio(.NET)"纠正"您的代码放置和删除空格,制表符等。

问题只是习惯了这一点。此规则会发生变化,并将继续更改并采用新的标准。所以几代人的问题在这里很明显。

顺便说一句,for是一个函数:它是一个迭代器。对于 if _ 也是如此,它需要一个谓词和一个函数作为参数。