函数中嵌套大括号的用途

时间:2015-04-22 03:30:21

标签: c

我对{}内的main感到困惑。有人可以解释一下他们的目的吗?我理解代码,但这是我第一次看到这种格式。

为什么代码的这一部分需要{},或者函数内部{}的用途是什么?它不是声明嵌套函数,还是它?

int main() 
{
    void *p1, *p2, *p3;
    arenaCheck();
    p1 = malloc(254);
    arenaCheck();
    p2 = malloc(25400);
    arenaCheck();
    p3 = malloc(254);
    printf("%llx %llx %llx\n", (long long)p1, (long long)p2, (long long)p3);
    arenaCheck();
    free(p2);
    arenaCheck();
    free(p3);
    arenaCheck();
    free(p1);
    arenaCheck();

    {   /* What is the purpose of these, what is this doing { } */
        struct timeval t1, t2;
        int i;
        getutime(&t1);
        for(i = 0; i < 10000; i++)
        if (malloc(4) == 0) 
        break;
        getutime(&t2);
        printf("%d *** malloc(4) required %f seconds\n", i, diffTimeval(&t2,&t1));
    }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

旧版本的C(pre-C99)需要在块的开头声明变量。 t1t2的声明如果为没有大括号的C版本编译此代码会导致错误。如果你正在使用C99或更新版本,你可以简单地删除大括号 - 在这种情况下它们是多余的。

答案 1 :(得分:2)

那是一个街区。它创造了一个词汇范围。块内的变量不能在外面使用。

int main() {
    {
        int i = 5;
    }
    printf("i = %d\n", i); // error
}

它们在旧程序中很有用,因为曾几何时,你必须将所有变量放在一个块的顶部。

在C ++中,析构函数将在块结束时被调用。