真的需要"缺少分号"错误吗?为什么不把它当作警告呢?
当我编译这段代码
int f = 1
int h=2;
Run Code Online (Sandbox Code Playgroud)
编译器聪明地告诉我,我错过了它.但对我而言,就像 - "如果你知道它,就把它视为存在并继续前进.(后来我可以修复警告.)
int sdf = 1, df=2;
sdf=1 df =2
Run Code Online (Sandbox Code Playgroud)
即使对于这段代码,它的行为也是一样的.也就是说,即使多个语句(没有;)在同一行中,编译器也知道.
那么,为什么不删除这个要求呢?为什么不表现得像Python,Visual Basic等.
讨论摘要
缺少两个示例/实例,并且分号实际上会导致问题.
1.
return
(a+b)
Run Code Online (Sandbox Code Playgroud)
这被认为是JavaScript最糟糕的方面之一.但是,在这种情况下,分号插入是JavaScript的问题,但不适用于C++.在C++中,如果;在返回后完成插入,则会出现另一个错误.也就是说,缺少返回值.
2
int *y;
int f = 1
*y = 2;
Run Code Online (Sandbox Code Playgroud)
对于这个我猜,没有比引入语句分隔符更好的方法,即分号.
Del*_*ani 55
C++编译器不这样做是非常好的.JavaScript 的最糟糕的一个方面是分号插入.想象一下:
return
(a + b);
Run Code Online (Sandbox Code Playgroud)
C++编译器将很乐意按预期继续下一行,而"插入"分号的语言(如JavaScript)会将其视为"返回"; 并错过了"(a + b);".
而不是依赖编译器错误修复,使其成为使用分号的习惯.
Jas*_*ams 30
在许多情况下需要使用分号.
如果你有:
int *y;
int f = 1
*y = 2;
Run Code Online (Sandbox Code Playgroud)
这将被解析为
int *y;
int f = 1 * y = 2;
Run Code Online (Sandbox Code Playgroud)
所以没有分号就不明确了.
首先,这只是一个小例子; 你确定编译器可以智能地告诉你更复杂的代码有什么问题吗?对于任何一段代码?是否所有编译器都能以相同的方式智能地识别这一点,以便可以保证一段C++代码可移植而丢失分号?
其次,C++是十多年前创建的,当时计算资源并不像现在这样.即使在今天,构建也可能需要相当长的时间.分号有助于清楚地划分不同的命令(对于用户和编译器!),并帮助程序员和编译器理解正在发生的事情.