2015-04-22 24 views
-1

我對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; 
} 
+0

你刪除了它們並編譯並運行它以查看是否有任何區別? – Cyrus

+1

[爲什麼用花括號括住C代碼塊?](http://stackoverflow.com/questions/1677778/why-enclose-blocks-of-c-code-in-curly-braces) – Cubia

回答

3

舊版本的C(pre-C99)所需變量將在塊的開始處聲明。如果爲那些不帶大括號的C版本編譯此代碼,則t1t2的聲明將導致錯誤。如果您使用C99或更新版本,則可以簡單地刪除大括號 - 在這種情況下,它們是多餘的。

2

這是一個塊。它創建了一個詞彙範圍。塊內部的變量不能在外部使用。

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

他們有用在老項目,因爲,曾幾何時,你不得不把所有的變量在塊的頂部。

在C++中,析構函數將在塊的結尾被調用。