C ++标点符号

时间:2012-06-11 12:27:48

标签: c++ punctuation

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

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

每种语言都有自己特有的标点符号。帕斯卡尔的时期,Fortran的逗号分开了循环,几乎所有其他人的分号。

据我所知,每种语言都有KEYWORDS(if,for,do,while,until等)由空格(或左边距)< space>(如果< space>等)设置。

每种语言都有函数,它们被调用的子程序。一些内置的用户编码。它们由< whitespace | left margin> function_name(参数);开始。如sqrt(x)或rand(y);

最近,似乎有一套新的标点符号规则。特别是在c ++中,初始化器被粘合到变量声明int x(0)的末尾;或者auto_ptr< p> p(新小发明);这总是让我误以为某人正在宣布一个函数prototoye或者使用函数作为整数(是吧?)。

然后"如果" '为'似乎已经成长了; if(true)for(;;)等等。从什么时候开始,关键字成为函数。

最后,功能似乎已经摆脱了他们的痛苦; sqrt(2)select(...)

问题:旧方式什么时候消失,这种新方式开始流行?除了我以外,是否有人发现阅读令人恼火,标点符号的位置传达的信息消失了?我完全知道K& R把{放在&#34的末尾;如果"或者"对于"在这里和那里保存一个字节。不能在这里使用这个借口。当硬盘空间飙升超过100 MiB时,空间作为失去可读性的借口而死亡。

您的想法被征求意见。如果有充分的理由这样做,我很乐意学习它,也许在50年后我会习惯它。当然,编译器能够识别这些(恕我直言)的拼写错误并保持正常运行,这很好,但仅仅因为你能用这种方式对其进行编码并不意味着你必须这样做,对吧?

谢谢!

2 个答案:

答案 0 :(得分:4)

对于C ++中对象和函数声明之间偶尔的歧义,搜索“最烦恼的解析”,你当然是正确的。但是,如果你总是混淆,那就意味着你不太擅长阅读C ++。你应该通过练习来提高。但无论如何,众所周知,C ++的设计主要不是为了易于阅读,特别是没有练习。它有其他设计优先事项。不是每个人都分享这些优先级,这就是为什么不是每个人都使用C ++。

关于在括号中附上条件,欢迎你写

if (foo) { bar; }

而不是

if(foo) { bar; }

为了在if的语法和函数调用的语法之间创建一个人为的区别。只要词法分析器能够找到标记之间的边界,C就完全放松了空白,所以剩下的就是风格,而不是语言。如果你想知道什么时候开始放松空间 - 我想在ALGOL系列语言开发过程中会有一段时间。我不知道ALGOL58,但这将是一个检查它是否存在的地方。

我很确定你的一些“旧方式”语言使用parens进行表达式分组,以及包含函数参数,所以你声称parens作为函数调用封闭器的一个真正含义从未真正存在过

我不认为我在C或C ++程序中错误地使用if进行函数调用,而且我认为你应该学会不要这样做。如果人们使用解析为if的宏做奇怪的事情,毫无疑问他们可能会让我感到困惑。但是,没有人声称C风格的宏不会引起混乱。

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

  

我完全知道K& R把{在'if'或'for'的末尾放到了   在这里和那里保存一个字节。不能在这里使用这个借口

这可能就是Ritchie把它放在那里的原因,但这并不是我把它放在那里的原因。我把它放在那里主要是为了保护垂直空间。今天仍然有限:我的硬盘可以存储我将用它的一小部分容量编写的每一行代码,但我仍然使用我的显示器的全高来读取代码,给出或取一些屏幕家具。我很确定{ - 在线自己是由那些不喜欢通过在屏幕上同时拥有多个功能而使问题复杂化的人发明的。额外的垂直空白整齐地防止了这一点,并且比更紧凑的样式更加严格限制了适合屏幕的功能的复杂性。

Python为每个块保存了另一行垂直空间,完全不用打开 - 关闭标点符号,虽然我不认为为什么 GvR就是这样做的。

总而言之,我认为我的答案是“不”,并非所有人都能正确 或者我的。可能也是一件好事。

答案 1 :(得分:0)

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

现在很多框架,比如Visual Studio(.NET)“纠正”你的代码放置和删除空格,制表符等。

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

BTW,for是一个函数:它是一个迭代器。 if _也是如此,它将谓词和函数作为参数。