1

通常在查看其他人的代码时,我会注意到块的括号位置有所不同。

例如,有些人使用:

int foo(){
    ...
}

而其他人使用:

int foo()
{
    ...
}

以及介于两者之间的多种方式。这是否会影响代码的编译速度?例如,如果我有一系列块,例如:

int foo() { ... {... {... {... {...} } } } }

int bar()
{
    ...
    {
        ...
        {
            ...
            {
                ...
                {
                    ...
                }
            }
        }
     }
}

其中 foo() 和 bar() 是相同的,除了空格和括号的位置。这些函数需要不同的时间来编译吗?一个在运行时会比另一个更快吗?

如果将其扩展到数百或数千个嵌套块,这会有什么不同吗?这会根据使用的编译器而改变吗?它会因不同的语言而改变,例如 C#、PHP、Perl 等吗?

抱歉,如果这看起来像很多一般性或开放式问题,只是我一直感兴趣的东西。

4

2 回答 2

1

这些函数需要不同的时间来编译吗?一个在运行时会比另一个更快吗?如果将其扩展到数百或数千个嵌套块,这会有什么不同吗?这会根据使用的编译器而改变吗?它会因不同的语言而改变,例如 C#、PHP、Perl 等吗?

不。不。不。不。不。几乎所有理智的编译器在词法分析阶段几乎立即去除空白。其他阶段甚至不知道有空格

唯一能产生影响的方法是编写有史以来最可怕的无能编译器,即便如此,我也会感到惊讶(这种程度的错误也会使它变得如此错误,以至于完全无法使用)。

于 2013-06-28T14:07:28.003 回答
0

编译器要做的第一件事是执行词法分析以去除空格、注释等,并将输入转换为一系列标记。

完整的流程类似如下,具体看具体实现:


在此处输入图像描述


由于词法分析器将一系列标记传递给解析器,因此任何额外的空格、括号位置等可能只会减慢词法分析阶段。即使那样,除非您遇到极端情况,例如 GB 的空白或类似的疯狂情况,否则差异也不会明显。

于 2013-06-28T14:42:30.153 回答