括号和空格的位置是否会影响编译时间和/或运行时间?

时间:2013-06-28 14:00:56

标签: c++ compilation

通常在查看其他人的代码时,我会发现块的括号位置存在差异。

例如,有些人使用:

int foo(){
    ...
}

其他人使用:

int foo()
{
    ...
}

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

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

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

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

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

很抱歉,如果这看起来像很多一般或开放式的问题,那就是我一直对此感兴趣的事情。

2 个答案:

答案 0 :(得分:1)

  

函数会花费不同的时间进行编译吗?一个人在运行时会比另一个人更快吗?如果要扩展到几百或几千个嵌套块,这会有什么不同吗?这会根据使用的编译器而改变吗?它会针对不同语言而改变,例如C#,PHP,Perl等吗?

没有。没有。编号。实际上,所有理智的编译器几乎立即在lexing阶段剥离了空白。其他阶段甚至不知道空格。

这可能会产生任何影响的唯一方法是有史以来最难以编写的编译器,即便如此,我也会感到惊讶(同样这种规模的错误会使它如此错误,它将完全无法使用)。 / p>

答案 1 :(得分:0)

编译器要做的第一件事是执行lexical analysis来删除空格,注释等,并将输入转换为一系列标记。

完整过程类似于以下内容,具体取决于具体实施:


enter image description here


由于词法分析器将一系列标记传递给解析器,因此任何额外的空格,括号位置等都可能会减慢lexing阶段的速度。即便如此,除非你有一个极端的情况,例如GB的空白或类似的东西,否则这种差异是不会引人注意的。