通常在查看其他人的代码时,我会发现块的括号位置存在差异。
例如,有些人使用:
int foo(){
...
}
其他人使用:
int foo()
{
...
}
介于两者之间。这是否会影响代码的编译速度?例如,如果我有一系列的块,例如:
int foo() { ... {... {... {... {...} } } } }
int bar()
{
...
{
...
{
...
{
...
{
...
}
}
}
}
}
其中foo()和bar()除了空格和括号位置外是相同的。这些函数需要不同的时间来编译吗?一个人在运行时会比另一个人更快吗?
如果要扩展到几百或几千个嵌套块,这会有什么不同吗?这会根据使用的编译器而改变吗?它会针对不同语言而改变,例如C#,PHP,Perl等吗?
很抱歉,如果这看起来像很多一般或开放式的问题,那就是我一直对此感兴趣的事情。
答案 0 :(得分:1)
函数会花费不同的时间进行编译吗?一个人在运行时会比另一个人更快吗?如果要扩展到几百或几千个嵌套块,这会有什么不同吗?这会根据使用的编译器而改变吗?它会针对不同语言而改变,例如C#,PHP,Perl等吗?
没有。没有。编号。实际上,所有理智的编译器几乎立即在lexing阶段剥离了空白。其他阶段甚至不知道是空格。
这可能会产生任何影响的唯一方法是有史以来最难以编写的编译器,即便如此,我也会感到惊讶(同样这种规模的错误会使它如此错误,它将完全无法使用)。 / p>
答案 1 :(得分:0)
编译器要做的第一件事是执行lexical analysis来删除空格,注释等,并将输入转换为一系列标记。
完整过程类似于以下内容,具体取决于具体实施:
由于词法分析器将一系列标记传递给解析器,因此任何额外的空格,括号位置等都可能会减慢lexing阶段的速度。即便如此,除非你有一个极端的情况,例如GB的空白或类似的东西,否则这种差异是不会引人注意的。